如何打包 Python 文件至 Mac app
pyinstaller -F demo.py
参数 |
含义 |
-F |
指定打包后只生成一个exe格式的文件 |
-D |
–onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项) |
-c |
–console, –nowindowed 使用控制台,无界面(默认) |
-w |
–windowed, –noconsole 使用窗口,无控制台 |
-p |
添加搜索路径,让其找到对应的库。 |
-i |
改变生成程序的icon图标 |
tkinter 指南
一个小例子
# -*- coding:utf-8 -*-
import tkinter as tk
root_window =tk.Tk() # 主窗口
root_window.title('C语言中文网:c.biancheng.net') # 窗口名字
root_window.mainloop() #开启主循环,让窗口处于显示状态
文字和关闭按钮
# -*- coding:utf-8 -*-
import tkinter as tk
root_window = tk.Tk() # 主窗口
root_window.title('C语言中文网:c.biancheng.net') # 窗口名字
root_window.geometry('450x300') # 大小
root_window.iconbitmap('favicon.ico') # 图标
root_window["background"] = "#C9C9C9" # 背景颜色
text=tk.Label(root_window,text="C语言中文网,欢迎您",bg="yellow",fg="red",font=('Times', 20, 'bold italic'))
text.pack() # 文字标签
button=tk.Button(root_window,text="关闭",command=root_window.quit)
button.pack(side="bottom") # 按钮
root_window.mainloop() #开启主循环,让窗口处于显示状态
常用的 15 个控件
下表列出了 Tkinter 中常用的 15 个控件:
控件类型 |
控件名称 |
控件作用 |
Button |
按钮 |
点击按钮时触发/执行一些事件(函数) |
Canvas |
画布 |
提供绘制图,比如直线、矩形、多边形等 |
Checkbutton |
复选框 |
多项选择按钮,用于在程序中提供多项选择框 |
Entry |
文本框输入框 |
用于接收单行文本输入 |
Frame |
框架(容器)控件 |
定义一个窗体(根窗口也是一个窗体),用于承载其他控件,即作为其他控件的容器 |
Lable |
标签控件 |
用于显示单行文本或者图片 |
LableFrame |
容器控件 |
一个简单的容器控件,常用于复杂的窗口布局。 |
Listbox |
列表框控件 |
以列表的形式显示文本 |
Menu |
菜单控件 |
菜单组件(下拉菜单和弹出菜单) |
Menubutton |
菜单按钮控件 |
用于显示菜单项 |
Message |
信息控件 |
用于显示多行不可编辑的文本,与 Label控件类似,增加了自动分行的功能 |
messageBox |
消息框控件 |
定义与用户交互的消息对话框 |
OptionMenu |
选项菜单 |
下拉菜单 |
PanedWindow |
窗口布局管理组件 |
为组件提供一个框架,允许用户自己划分窗口空间 |
Radiobutton |
单选框 |
单项选择按钮,只允许从多个选项中选择一项 |
Scale |
进度条控件 |
定义一个线性“滑块”用来控制范围,可以设定起始值和结束值,并显示当前位置的精确值 |
Spinbox |
高级输入框 |
Entry 控件的升级版,可以通过该组件的上、下箭头选择不同的值 |
Scrollbar |
滚动条 |
默认垂直方向,鼠标拖动改变数值,可以和 Text、Listbox、Canvas等控件配合使用 |
Text |
多行文本框 |
接收或输出多行文本内容 |
Toplevel |
子窗口 |
在创建一个独立于主窗口之外的子窗口,位于主窗口的上一层,可作为其他控件的容器 |
控件的基本属性
属性名称 |
说明 |
anchor |
定义控件或者文字信息在窗口内的位置 |
bg |
bg 是 background 的缩写,用来定义控件的背景颜色,参数值可以颜色的十六进制数,或者颜色英文单词 |
bitmap |
定义显示在控件内的位图文件 |
borderwidth |
定于控件的边框宽度,单位是像素 |
command |
该参数用于执行事件函数,比如单击按钮时执行特定的动作,可将执行用户自定义的函数 |
cursor |
当鼠标指针移动到控件上时,定义鼠标指针的类型,字符换格式,参数值有 crosshair(十字光标)watch(待加载圆圈)plus(加号)arrow(箭头)等 |
font |
若控件支持设置标题文字,就可以使用此属性来定义,它是一个数组格式的参数 (字体,大小,字体样式) |
fg |
fg 是 foreground 的缩写,用来定义控件的前景色,也就是字体的颜色 |
height |
该参数值用来设置控件的高度,文本控件以字符的数目为高度(px),其他控件则以像素为单位 |
image |
定义显示在控件内的图片文件 |
justify |
定义多行文字的排列方式,此属性可以是 LEFT/CENTER/RIGHT |
padx/pady |
定义控件内的文字或者图片与控件边框之间的水平/垂直距离 |
relief |
定义控件的边框样式,参数值为FLAT(平的)/RAISED(凸起的)/SUNKEN(凹陷的)/GROOVE(沟槽桩边缘)/RIDGE(脊状边缘) |
text |
定义控件的标题文字 |
state |
控制控件是否处于可用状态,参数值默认为 NORMAL/DISABLED,默认为 NORMAL(正常的) |
width |
用于设置控件的宽度,使用方法与 height 相同 |
主窗口
下表列出了窗口的常用方法,其中 window 代表主窗口对象:
常用方法
函数 |
说明 |
window.title("my title") |
接受一个字符串参数,为窗口起一个标题 |
window.resizable() |
是否允许用户拉伸主窗口大小,默认为可更改,当设置为 resizable(0,0)或者resizable(False,False)时不可更改 |
window.geometry() |
设定主窗口的大小以及位置,当参数值为 None 时表示获取窗口的大小和位置信息。 |
window.quit() |
关闭当前窗口 |
window.update() |
刷新当前窗口 |
window.mainloop() |
设置窗口主循环,使窗口循环显示(一直显示,指导窗口被关闭) |
window.iconbitmap() |
设置窗口左上角的图标(图标是.ico文件类型) |
window.config(background ="red") |
设置窗口的背景色为红色,也可以接受 16 进制的颜色值 |
window.minsize(50,50) |
设置窗口被允许调整的最小范围,即宽和高各50 |
window.maxsize(400,400) |
设置窗口被允许调整的最大范围,即宽和高各400 |
window.attributes("-alpha",0.5) |
用来设置窗口的一些属性,比如透明度(-alpha)、是否置顶(-topmost)即将主屏置于其他图标之上、是否全屏(-fullscreen)全屏显示等 |
window.state("normal") |
用来设置窗口的显示状态,参数值 normal(正常显示),icon(最小化),zoomed(最大化), |
window.withdraw() |
用来隐藏主窗口,但不会销毁窗口。 |
window.iconify() |
设置窗口最小化 |
window.deiconify() |
将窗口从隐藏状态还原 |
window.winfo_screenwidth() window.winfo_screenheight() |
获取电脑屏幕的分辨率(尺寸) |
window.winfo_width() window.winfo_height() |
获取窗口的大小,同样也适用于其他控件,但是使用前需要使用 window.update() 刷新屏幕,否则返回值为1 |
window.protocol("协议名",回调函数) |
启用协议处理机制,常用协议有 WN_DELETE_WINDOW,当用户点击关闭窗口时,窗口不会关闭,而是触发回调函数。 |
程序 1
方法使用例子
import tkinter as tk
window =tk.Tk()
window.title('C语言中文网')
window.geometry('450x300')
print("电脑的分辨率是%dx%d"%(window.winfo_screenwidth(),window.winfo_screenheight()))
window.update()
print("窗口的分辨率是%dx%d"%(window.winfo_width(),window.winfo_height()))
# 如使用该函数则窗口不能被拉伸
# window.resizable(0,0)
window.config(background="#6fb765")
# 设置窗口处于顶层
window.attributes('-topmost',True)
# 设置窗口的透明度
window.attributes('-alpha',0.9)
# 最大调整的范围
window.maxsize(600,600)
# 最小调整的范围
window.minsize(50,50)
#进入主循环,显示主窗口
window.mainloop()
程序 2 ,
演示 protocol
from tkinter import Tk
# 导入 对话框控件
from tkinter import messagebox
root = Tk()
def QueryWindow(): # 当退出时
if messagebox.showwarning("警告","出现了一个错误"): # 显示警告
root.destroy() # 关闭窗口
# 当 Tkinter 使用 WM_DELETE_WINDOW 协议与主窗口进行交互
# 则 Tkinter 主窗口右上角 x 号的关闭功能失效,
# 也就是无法通过点击 x 来关闭窗口,转变成调用用户自定义的函数。
root.protocol('WM_DELETE_WINDOW', QueryWindow)
root.mainloop()
程序 3,
演示 protocol 2
import tkinter as tk
# 定义窗口
window = tk.Tk()
window.title('c语言中文网')
window.geometry('300x300')
# 定义回调函数
def callback():
print("执行回调函数","C语言中文网欢迎您")
# 点击执行按钮
button = tk.Button(window, text="执行", command=callback)
button.pack()
window.mainloop()
程序 4 ,
显示到屏幕中间
import tkinter as tk
window = tk.Tk()
window.title('c语言中文网')
# 设置窗口大小变量
width = 300
height = 300
# 窗口居中,获取屏幕尺寸以计算布局参数,使窗口居屏幕中央
screenwidth = window.winfo_screenwidth()
screenheight = window.winfo_screenheight()
size_geo = '%dx%d+%d+%d' % (width, height, (screenwidth-width)/2, (screenheight-height)/2)
window.geometry(size_geo)
window.mainloop()
Label 标签控件
属性
属性名称 |
说明 |
anchor |
控制文本(或图像)在 Label 中显示的位置(方位),通过方位的英文字符串缩写(n、ne、e、se、s、sw、w、nw、center)实现定位,默认为居中(center) |
bg |
用来设置背景色 |
bd |
即 borderwidth 用来指定 Label 控件的边框宽度,单位为像素,默认为 2 个像素 |
bitmap |
指定显示在 Label 控件上的位图,若指定了 image 参数,则该参数会被忽略 |
compound |
控制 Lable 中文本和图像的混合模式,若选项设置为 CENTER,则文本显示在图像上,如果将选项设置为 BOTTOM、LEFT、RIGHT、TOP,则图像显示在文本旁边。 |
cursor |
指定当鼠标在 Label 上掠过的时候,鼠标的的显示样式,参数值为 arrow、circle、cross、plus |
disableforeground |
指定当 Label 设置为不可用状态的时候前景色的颜色 |
font |
指定 Lable 中文本的 (字体,大小,样式)元组参数格式,一个 Lable 只能设置一种字体 |
fg |
设置 Label 的前景色 |
height/width |
设置 Lable 的高度/宽度,如果 Lable 显示的是文本,那么单位是文本单元,如果 Label 显示的是图像,那么单位就是像素,如果不设置,Label 会自动根据内容来计算出标签的高度 |
highlightbackground |
当 Label 没有获得焦点的时候高亮边框的颜色,系统的默认是标准背景色 |
highlightcolor |
指定当 Lable 获得焦点的话时候高亮边框的颜色,系统默认为0,不带高亮边框 |
image |
指定 Label 显示的图片,一般是 PhotoImage、BitmapImage 的对象 |
justify |
表示多行文本的对齐方式,参数值为 left、right、center,注意文本的位置取决于 anchor 选项 |
padx/pady |
padx 指定 Label 水平方向上的间距(即内容和边框间),pady 指定 Lable 水平方向上的间距(内容和边框间的距离) |
relief |
指定边框样式,默认值是 "flat",其他参数值有 "groove"、"raised"、"ridge"、"solid"或者"sunken" |
state |
该参数用来指定 Lable 的状态,默认值为"normal"(正常状态),其他可选参数值有"active"和"disabled" |
takefocus |
默认值为False,如果是 True,表示该标签接受输入焦点 |
text |
用来指定 Lable 显示的文本,注意文本内可以包含换行符 |
underline |
给指定的字符添加下划线,默认值为 -1 表示不添加,当设置为 1 时,表示给第二个文本字符添加下划线。 |
wraplength |
将 Label 显示的文本分行,该参数指定了分行后每一行的长度,默认值为 0 |
文字程序
import tkinter as tk
win = tk.Tk()
win.title("C语言中文网")
win.geometry('400x200')
# 若内容是文字则以字符为单位,图像则以像素为单位
label = tk.Label(win,
text="网址:c.biancheng.net",
font=('宋体',20, 'bold italic'),
bg="#7CCD7C",
width=30,height=5, # 设置标签内容区大小
padx=10, pady=15, borderwidth=10, relief="sunken" # 设置填充区距离、边框宽度和其样式(凹陷式)
)
label.pack()
win.mainloop()
图像文字(无法打包)
import tkinter as tk
win = tk.Tk()
win.title("C语言中文网")
#显示图片(注意这里默认支持的图片格式为GIF)
photo = tk.PhotoImage(file = '0.gif')
# 将图片放在主窗口的右边
lab =tk.Label(win,image=photo).pack(side="right")
# 显示文字,设置文本格式
text = "C语言中文网欢迎您,\n"\
"这里有精彩的教程,\n "\
"这里有数不尽的知识宝藏"
lab_text =tk.Label(win,text=text,fg ='#7CCD7C',font=('微软雅黑',15,'italic'),justify='left',padx=10).pack(side='left')
win.mainloop()
创建 message
from tkinter import *
#创建主窗口
win = Tk()
win.config(bg='#8DB6CD')
win.title("C语言中文网")
win.geometry('400x300')
txt = "C语言中文网,网址是:c.biancheng.net"
msg = Message (win, text=txt,width =60,font=('微软雅黑',10,'bold'))
msg.pack (side=LEFT)
win.mainloop ()
Button 按钮
Button 控件的
常用属性
如下所示:
属性 |
说明 |
anchor |
控制文本所在的位置,默认为中心位置(CENTER) |
activebackground |
当鼠标放在按钮上时候,按妞的背景颜色 |
activeforeground |
当鼠标放在按钮上时候,按钮的前景色 |
bd |
按钮边框的大小,默认为 2 个像素 |
bg |
按钮的背景色 |
command |
用来执行按钮关联的回调函数。当按钮被点击时,执行该函数 |
fg |
按钮的前景色 |
font |
按钮文本的字体样样式 |
height |
按钮的高度 |
highlightcolor |
按钮控件高亮处要显示的颜色 |
image |
按钮上要显示的图片 |
justify |
按钮显示多行文本时,用来指定文本的对齐方式,参数值有 LEFT/RIGHT/CENTER |
padx/pady |
padx 指定 x 轴(水平方向)的间距大小,pady 则表示 y轴(垂直方向)的间距大小 |
ipadx/ipady |
ipadx 指标签文字与标签容器之间的横向距离;ipady 则表示标签文字与标签容器之间的纵向距离 |
state |
设置按钮的可用状态,可选参数有NORMAL/ACTIVE/DISABLED,默认为 NORMAL |
text |
按钮控件要显示的文本 |
网格布局
import tkinter as tk
from tkinter import messagebox
win = tk.Tk()
win.title("C语言中文网")
win.geometry('400x200+100+100')
win.resizable(0,0)
# 将俩个标签分别布置在第一行、第二行
tk.Label(win, text="账号:").grid(row=0)
tk.Label(win, text="密码:").grid(row=1)
# 创建输入框控件
e1 = tk.Entry(win)
# 以 * 的形式显示密码
e2 = tk.Entry(win,show='*')
e1.grid(row=0, column=1, padx=10, pady=5)
e2.grid(row=1, column=1, padx=10, pady=5)
# 编写一个简单的回调函数
def login():
messagebox.showinfo('欢迎您到来')
tk.Button(win, text="登录", width=10, command=login).grid(row=3, column=0, sticky="w", padx=10, pady=5)
tk.Button(win, text="退出", width=10, command=win.quit).grid(row=3, column=1, sticky="e", padx=10, pady=5)
win.mainloop()
Entry 输入控件
演示动态字符串 ,
时间程序(演示动态字符串 )
import tkinter as tk
import time
root = tk.Tk()
root.title("C语言中文网")
root.geometry('450x150+100+100')
root.resizable(0,0)
root.title('我们的时钟')
# 获取时间的函数
def gettime():
dstr.set(time.strftime("%H:%M:%S")) # 获取当前时间
root.after(1000, gettime) # 每隔 1s 调用一次 gettime()函数来获取时间
# 生成动态字符串
dstr = tk.StringVar()
lb = tk.Label(root,textvariable=dstr,fg='green',font=("微软雅黑",85))
lb.pack()
# 调用生成时间的函数
gettime()
# 显示窗口
root.mainloop()
演示 entry
import tkinter as tk
win = tk.Tk()
win.geometry('250x100')
win.title("C语言中文网")
win.resizable(0,0)
# 创建输入框控件
entry1 = tk.Entry(win)
# 放置输入框,并设置位置
entry1.pack(padx=20, pady=20)
entry1.delete(0, "end")
# 插入默认文本
entry1.insert(0,'C语言中文网,网址:c.biancheng.net')
# 得到输入框字符串
print(entry1.get())
# 删除所有字符
# entry1.delete(0, tk.END)
win.mainloop()
常用属性
方法 |
说明 |
delete() |
根据索引值删除输入框内的值 |
get() |
获取输入框内的是 |
set() |
设置输入框内的值 |
insert() |
在指定的位置插入字符串 |
index() |
返回指定的索引值 |
select_clear() |
取消选中状态 |
select_adujst() |
确保输入框中选中的范围包含 index 参数所指定的字符,选中指定索引和光标所在位置之前的字符 |
select_from (index) |
设置一个新的选中范围,通过索引值 index 来设置 |
select_present() |
返回输入框是否有处于选中状态的文本,如果有则返回 true,否则返回 false。 |
select_to() |
选中指定索引与光标之间的所有值 |
select_range() |
选中指定索引与光标之间的所有值,参数值为 start,end,要求 start 必须小于 end。 |
简单计算器
from tkinter import *
# 创建窗体
win = Tk()
win.title("C语言中文网")
win.geometry('300x300')
# 创建一个容器来包括其他控件
frame = Frame (win)
def calc() :
# 用户输入的表达式,计算结果后转换为字符串
result = "= "+ str (eval(expression.get()))
#将计算的结果显示在Label控件上
label.config(text =result)
#创建一个Label控件
label = Label (frame)
#创建一个Entry控件
entry = Entry (frame)
#读取用户输入的表达式
expression = StringVar ()
#将用户输入的表达式显示在Entry控件上
entry ["textvariable"] = expression
#创建-一个 Button控件.当用户输入完毕后,单击此按钮即计算表达式的结果
button1 = Button (frame, text="等 于",command=calc)
#设置Entry控件为焦点所在
entry.focus ()
frame.pack ()
#Entry控件位于窗体的上方
entry .pack()
#Label控件位于窗体的左方
label .pack (side="left")
#Button控件位于窗体的右方
button1.pack (side="right")
#开始程序循环
frame .mainloop()
Spinbox 高级输入框
import tkinter as tk
root = tk.Tk()
root.title("C语言中文网")
root.geometry('300x200+300+300')
# 如果是数字使用 from_和to参数,范围 0-20,并且与2步长递增或递减
w = tk.Spinbox(root,from_=0,to=20, increment=2,width = 15,bg='#9BCD9B')
w.pack()
# 显示窗口
root.mainloop()
Text 文本框控件
from tkinter import *
win = Tk()
win.title("C语言中文网")
win.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico')
win.geometry('400x420')
# width 一行可见的字符数;height 显示的行数
text = Text(win, width=50, height=30, undo=True, autoseparators=False)
# 适用 pack(fill=X) 可以设置文本域的填充模式。比如 X表示沿水平方向填充,Y表示沿垂直方向填充,BOTH表示沿水平、垂直方向填充
text.pack()
# INSERT 光标处插入;END 末尾处插入
text.insert(INSERT, 'C语言中文网,一个有温度的网站')
win.mainloop()
Text 控件还具备以下
属性
属性 |
说明 |
autoseparators |
默认为 True,表示执行撤销操作时是否自动插入一个“分隔符”(其作用是用于分隔操作记录) |
exportselection |
默认值为 True,表示被选中的文本是否可以被复制到剪切板,若是 False 则表示不允许。 |
insertbackground |
设置插入光标的颜色,默认为 BLACK |
insertborderwidth |
设置插入光标的边框宽度,默认值为 0 |
insertofftime |
该选项控制光标的闪烁频频率(灭的状态) |
insertontime |
该选项控制光标的闪烁频频率(亮的状态) |
selectbackground |
指定被选中文本的背景颜色,默认由系统决定 |
selectborderwidth |
指定被选中文本的背景颜色,默认值是0 |
selectforeground |
指定被选中文本的字体颜色,默认值由系统指定 |
setgrid |
默认值是 False,指定一个布尔类型的值,确定是否启用网格控制 |
spacing1 |
指定 Text 控件文本块中每一行与上方的空白间隔,注意忽略自动换行,且默认值为 0。 |
spacing2 |
指定 Text 控件文本块中自动换行的各行间的空白间隔,忽略换行符,默认值为0 |
spacing3 |
指定 Text 组件文本中每一行与下方的空白间隔,忽略自动换行,默认值是 0 |
tabs |
定制 Tag 所描述的文本块中 Tab 按键的功能,默认被定义为 8 个字符宽度,比如 tabs=('1c', '2c', '8c') 表示前 3 个 Tab 宽度分别为 1厘米,2厘米,8厘米。 |
undo |
该参数默认为 False,表示关闭 Text 控件的“撤销”功能,若为 True 则表示开启 |
wrap |
该参数用来设置当一行文本的长度超过 width 选项设置的宽度时,是否自动换行,参数值 none(不自动换行)、char(按字符自动换行)、word(按单词自动换行) |
xscrollcommand |
该参数与 Scrollbar 相关联,表示沿水平方向上下滑动 |
yscrollcommand |
该参数与 Scrollbar 相关联,表示沿垂直方向左右滑动 |
基本方法
方法 |
说明 |
bbox(index) |
返回指定索引的字符的边界框,返回值是一个 4 元组,格式为(x,y,width,height) |
edit_modified() |
该方法用于查询和设置 modified 标志(该标标志用于追踪 Text 组件的内容是否发生变化) |
edit_redo() |
“恢复”上一次的“撤销”操作,如果设置 undo 选项为 False,则该方法无效。 |
edit_separator() |
插入一个“分隔符”到存放操作记录的栈中,用于表示已经完成一次完整的操作,如果设置 undo 选项为 False,则该方法无效。 |
get(index1, index2) |
返回特定位置的字符,或者一个范围内的文字。 |
image_cget(index, option) |
返回 index 参数指定的嵌入 image 对象的 option 选项的值,如果给定的位置没有嵌入 image 对象,则抛出 TclError 异常 |
image_create() |
在 index 参数指定的位置嵌入一个 image 对象,该 image 对象必须是 Tkinter 的 PhotoImage 或 BitmapImage 实例。 |
insert(index, text) |
在 index 参数指定的位置插入字符串,第一个参数也可以设置为 INSERT,表示在光标处插入,END 表示在末尾处插入。 |
delete(startindex [, endindex]) |
删除特定位置的字符,或者一个范围内的文字。 |
see(index) |
如果指定索引位置的文字是可见的,则返回 True,否则返回 False。 |
Tag 文本标签
from tkinter import *
from tkinter import *
# 创建主窗口
win = Tk()
win.title(string = "C语言中文网")
# 创建一个Text控件
text = Text (win)
# 在Text控件内插入- -段文字 ,INSERT表示在光标处插入,END表示在末尾处插入
text.insert (INSERT, "C语言中文网(网址:c.biancheng.net),一个有温度的网站,一生只做一件事\n\n")
# 跳下一行
text.insert (INSERT, "\n\n")
# 在Text控件内插入- -个按钮
button = Button(text, text="关闭",command=win.quit)
text. window_create (END, window=button)
# 填充水平和垂直方向,这里设置 expand为 True 否则不能垂直方向延展
text .pack (fill=BOTH,expand=True)
# 在第一行文字的第0个字符到第6个字符处插入标签,标签名称为"name"
text.tag_add("name", "1.0", "1.6")
# 将插入的按钮设置其标签名为"button"
text.tag_add ("button", button)
#使用 tag_config() 来改变标签"name"的前景与背景颜色,并加下画线,通过标签控制字符的样式
text.tag_config("name", font=('微软雅黑',18,'bold'),background="yellow", foreground= "blue",underline=1)
#设置标签"button"的居中排列
text. tag_config("button", justify="center")
#开始程序循环
win .mainloop()
。。。
event 事件
显示按键
from tkinter import *
# 定义事件函数,必须用event参数
def show_key(event):
# 查看触发事件的按钮
s=event.keysym
# 将其显示在按钮控件上
lb.config(text=s)
root=Tk()
root.config(bg='#87CEEB')
root.title("C语言中文网")
root.geometry('450x350+300+200')
# 添加一个按钮控件
lb=Label(root,text='请按键',fg='blue',font=('微软雅黑',15))
# 给按钮控件绑定事件,按下任意键,然后调用事件处理函数。注意,此处需要在英文状态下进行输入
lb.bind('<Key>',show_key)
# 设置按钮获取焦点
lb.focus_set()
lb.pack()
# 显示窗口
root.mainloop()
事件类型
事件码 |
说明 |
|
单击鼠标左键,简写为,后面的数字可以是1/2/3,分别代表左键、中间滑轮、右键 |
|
释放鼠标左键,后面数字可以是1/2/3,分别代表释放左键、滑轮、右键 |
|
按住鼠标左键移动,和分别表示按住鼠标滑轮移动、右键移动 |
|
转动鼠标滑轮 |
|
双击鼠标左键 |
|
鼠标光标进入控件实例 |
|
鼠标光标离开控件实例 |
|
按下键盘上的任意键 |
<KeyPress-字母>/<KeyPress-数字> |
按下键盘上的某一个字母或者数字键 |
|
释放键盘上的按键 |
|
回车键,其他同类型键有/// |
|
空格键 |
/// |
方向键 |
... |
常用的功能键 |
|
组合键,再比如,表示用户同时点击 Ctrl + Shift + T |
|
当控件获取焦点时候触发,比如鼠标点击输入控件输入内容,可以调用 focus_set() 方法使控件获得焦点 |
|
当控件失去焦点时激活,比如当鼠标离开输入框的时候 |
|
控件的发生改变的时候触发事件,比如调整了控件的大小等 |
|
当控件的状态从“激活”变为“未激活”时触发事件 |
|
当控件被销毁的时候触发执行事件的函数 |
|
当窗口或组件的某部分不再被覆盖的时候触发事件 |
|
当应用程序至少有一部分在屏幕中是可见状态时触发事件 |
常用属性
属性 |
说明 |
widget |
发生事件的是哪一个控件 |
x,y |
相对于窗口的左上角而言,当前鼠标的坐标位置 |
x_root,y_root |
相对于屏幕的左上角而言,当前鼠标的坐标位置 |
char |
用来显示所按键相对应的字符 |
keysym |
按键名,比如 Control_L 表示左边的 Ctrl 按键 |
keycode |
按键码,一个按键的数字编号,比如 Delete 按键码是107 |
num |
1/2/3中的一个,表示点击了鼠标的哪个按键,按键分为左、中、右 |
width,height |
控件的修改后的尺寸,对应着 事件 |
type |
事件类型 |
布局管理
pack()
pack() 是一种较为简单的布局方法,在不使用任何参数的情况下,它会将控件以添加时的先后顺序,自上而下,一行一行的进行排列,并且默认居中显示。pack() 方法的常用参数如下所示:
属性 |
说明 |
anchor |
组件在窗口中的对齐方式,有 9 个方位参数值,比如"n"/"w"/"s"/"e"/"ne",以及 "center" 等(这里的 e w s n分别代表,东西南北) |
expand |
是否可扩展窗口,参数值为 True(扩展)或者 False(不扩展),默认为 False,若设置为 True,则控件的位置始终位于窗口的中央位置 |
fill |
参数值为 X/Y/BOTH/NONE,表示允许控件在水平/垂直/同时在两个方向上进行拉伸,比如当 fill = X 时,控件会占满水平方向上的所有剩余的空间。 |
ipadx,ipady |
需要与 fill 参数值共同使用,表示组件与内容和组件边框的距离(内边距),比如文本内容和组件边框的距离,单位为像素(p),或者厘米(c)、英寸(i) |
padx,pady |
用于控制组件之间的上下、左右的距离(外边距),单位为像素(p),或者厘米(c)、英寸(i) |
side |
组件放置在窗口的哪个位置上,参数值 'top','bottom','left','right'。注意,单词小写时需要使用字符串格式,若为大写单词则不必使用字符串格式 |
pack 例子
from tkinter import *
win = Tk()
win.title("C语言中文网")
win.geometry('450x300+300+300')
lb_red = Label(win,text="红色",bg="Red",fg='#ffffff',relief=GROOVE)
# 默认以top方式放置
lb_red.pack()
lb_blue = Label(win,text="蓝色",bg="blue",fg='#ffffff',relief=GROOVE)
# 沿着水平方向填充,使用 pady 控制蓝色标签与其他标签的上下距离为 5 个像素
lb_blue.pack(fill=X,pady='5px')
lb_green = Label(win,text="绿色",bg="green",fg='#ffffff',relief=RAISED)
# 将 黄色标签所在区域都填充为黄色,当使用 fill 参数时,必须设置 expand = 1,否则不能生效
lb_green.pack(side=LEFT,expand=1,fill = BOTH)
win.mainloop()
Grid 例子
import tkinter as tk
from tkinter import messagebox
root = tk.Tk()
root.title("C语言中文网")
root.resizable(0,0)
tk.Label(root, text="用户名").grid(row=0, sticky="w")
tk.Label(root, text="密码").grid(row=1, sticky="w")
tk.Entry(root).grid(row=0, column=1)
tk.Entry(root, show="*").grid(row=1, column=1)
# 加载图片LOGO,注意这里是gif格式的图片
photo = tk.PhotoImage(file="/Users/kehongli/Downloads/removeAnytime/pythontest/0.gif")
tk.Label(root, image=photo).grid(row=0, column=2, rowspan=2, padx='4px', pady='5px')
# 编写一个简单的回调函数
def login():
messagebox.showinfo('欢迎来到C语言中文网')
# 使用grid()函数来布局,并控制按钮的显示位置
tk.Button(root, text="登录", width=10, command=login).grid(row=3, column=0, columnspan=2,sticky="w", padx=10, pady=5)
tk.Button(root, text="退出", width=10, command=root.quit).grid(row=3, column=1, columnspan=2,sticky="e", padx=10, pady=5)
# 开启事件主循环
root.mainloop()
place()
属性
属性 |
说明 |
anchor |
定义控件在窗体内的方位,参数值N/NE/E/SE/S/SW/W/NW 或 CENTER,默认值是 NW |
bordermode |
定义控件的坐标是否要考虑边界的宽度,参数值为 OUTSIDE(排除边界) 或 INSIDE(包含边界),默认值 INSIDE。 |
x、y |
定义控件在根窗体中水平和垂直方向上的起始绝对位置 |
relx、rely |
1. 定义控件相对于根窗口(或其他控件)在水平和垂直方向上的相对位置(即位移比例),取值范围再 0.0~1.0 之间 2. 可设置 in_ 参数项,相对于某个其他控件的位置 |
height、width |
控件自身的高度和宽度(单位为像素) |
relheight、relwidth |
控件高度和宽度相对于根窗体高度和宽度的比例,取值也在 0.0~1.0 之间 |
例子
from tkinter import *
#主窗口
win = Tk()
win.title("C语言中文网")
#创建一个frame窗体对象,用来包裹标签
frame = Frame (win, relief=SUNKEN, borderwidth=2, width=450, height=250)
# 在水平、垂直方向上填充窗体
frame. pack (side=TOP, fill=BOTH, expand=1)
# 创建 "位置1"
Label1 = Label ( frame, text="位置1",bg='blue',fg='white')
# 使用 place,设置第一个标签位于距离窗体左上角的位置(40,40)和其大小(width,height)
# 注意这里(x,y)位置坐标指的是标签左上角的位置(以NW左上角进行绝对定位,默认为NW)
Label1.place (x=40,y=40, width=60, height=30)
# 设置标签2
Label2 = Label (frame, text="位置2",bg='purple',fg='white')
# 以右上角进行绝对值定位,anchor=NE,第二个标签的位置在距离窗体左上角的(180,80)
Label2.place(x=180,y=80, anchor=NE, width=60, height=30)
# 设置标签3
Label3 = Label (frame, text="位置3",bg='green',fg='white')
# 设置水平起始位置相对于窗体水平距离的0.6倍,垂直的绝对距离为80,大小为60,30
Label3.place(relx=0.6,y=80, width=60, height=30)
# 设置标签4
Label4 = Label (frame, text="位置4",bg='gray',fg='white')
# 设置水平起始位置相对于窗体水平距离的0.01倍,垂直的绝对距离为80,并设置高度为窗体高度比例的0.5倍,宽度为80
Label4.place(relx=0.01,y=80,relheight=0.4,width=80)
#开始事件循环
win. mainloop()
对话框
百度关键词搜索 API 接口
接口地址:https://www.baidu.com/s
请求方式:GET
返回格式:HTML 页面
请求参数:
参数名 |
类型 |
描述 |
示例 |
wd |
String |
需要搜索的关键词内容 |
如何做京酱肉丝 |