from tkinter import tk
#初始化tk()
root = tk.Tk()
#设置标题
root.title('Python GUI Learning')
#设置窗口大小
root.geometry('380x300')
#设置窗口是否可变长、宽,True:可变,False:不可变
root.resizable(width=False, height=True)
#…… 设置控件
#进入消息循环
root.mainloop()
常见函数
函数 | 含义 |
---|---|
root.title | 设置窗口的标题 |
root.resizable(0, 0) | 窗口大小可调性,分别表示x,y方向的可变性 |
root.geometry(“250x150+10+20”) | 设置窗口大小 |
root.quit() | 退出 |
root.update() | 刷新页面(界面显示一次后直接退出结束程序) |
root.update_idletasks() | 刷新页面 |
root.mainloop() | 窗口循环显示 |
root.iconbitmap(logo.ico) | 设置窗口图标 |
root.config(background = “pink”) | 设置背景颜色 |
root.resizable(False,False) | 窗口的高度和宽度是否可变 |
window.minsize(100,100) | 窗口的最小缩放 |
window.maxsize(600,333) | 窗口最大缩放 |
window.overrideredirect(True) | 设置关闭窗口按钮是否显示 |
window.attributes(“-alpha”,0.9) | 设置窗口的透明度,1为不透明,0为完全透明 |
root.attributes(“-toolwindow”,True) | True 只有退出按钮,也没有图标;False 正常的窗体样式 |
root.attributes(“-fullscreen”, True) | True 全屏;False 正常显示 |
root.attributes(“-topmost”, True) | True 所有窗口中处于最顶层;False 正常显示 |
root.overrideredirect(True) | True 没有工具栏按钮;False 正常显示 |
root.state(“zoomed”) | 启动窗口最大化 |
root.withdraw() | 窗口隐藏,取消用deiconify()方法 |
root.iconify() | 窗口最小化 |
root.deiconify() | 还原窗口 |
window.protocol(“协议名”,回调函数) | 启用协议处理机制,常用协议有 WN_DELETE_WINDOW,当用户点击关闭窗口时,窗口不会关闭,而是触发回调函数。 |
锁定窗口大小
锁定宽度:
窗口名字.resizable(False, True)
锁定高度:
窗口名字.resizable(True, False)
锁定全部:
窗口名字.resizable(False, False)
Tkinter有特定的几何状态管理方法,管理整个控件区域组织,以下是公开的几何管理类:包,网格,位置;
属性 | 说明 |
---|---|
after | 将组件置于其他组件之后 |
before | 将组件置于其他组件之前 |
ancho | 组件的对齐方式,顶对齐’n’,底对齐’s’,左’w’,右’e’ |
side | 组件在主窗口的位置,可以为’top’,‘bottom’,‘left’,‘right’ (使用时tk.TOP,tk.LEFT) |
fill | 填充方式 (Y: 垂直; X: 水平;BOTH: 水平+垂直),是否在某个方向充满窗口 |
expand | 1可扩展,0不可扩展,代表控件是否会随窗口缩放 |
属性 | 说明 |
---|---|
column | 组件所在的列起始位置(列号) |
columnspan | 组件的列宽;跨列数(行跨列) |
row | 组件所在的行起始位置(行号) |
rowspan | 组件的行宽;rowspam=3 跨3行(列跨行) |
sticky | 对齐方式:NSEW(北南东西)上下左右 |
padx、pady | x方向间距、y方向间距(padx=5) |
属性 | 说明 |
---|---|
anchor | 组件对齐方式;n, ne, e, se, s, sw, w, nw, or center ; (‘n’==N) |
x | 组件左上角的x坐标; |
y | 组件左上角的y坐标; |
relx: | 组件左上角相对于窗口的x坐标,应为0-1之间的小数;图形位置相对窗口变化 |
rely | 组件左上角相对于窗口的y坐标,应为0-1之间的小数; |
width | 组件的宽度; |
heitht | 组件的高度; |
relwidth | 组件相对于窗口的宽度,0-1之间的小数,图形宽度相对窗口变化; |
relheight | 组件相对于窗口的高度,0-1之间的小数; |
标签控件被用于显示文本和图像。标签可包含多行文本,但只能用一种字体。
注:你如果需要显示一行或多行文本且不允许用户修改,你可以使用 Label 组件
语法格式:label=tk.Label(root,option)
option:可选项(即标签的可设置的属性),这些选项可以用键-值的形式设置,以逗号分隔;
可选项 说明 应用 text 设置文本内容,可以包含换行符(\n) text=‘辞职人:正信’ font 1.设置字体、字号、样式:
bold(粗体) 默认值为normal(正常粗细);
italic(斜体) 默认值为 roman(正常直立);
underline(下划线),overstrike(删除线))。
2. 一个 Label 只能设置一种字体
3. 默认值由系统指定font=(‘黑体’, 18, bold),
font=18underline 1. 跟 text 选项一起使用,用于指定哪一个字符画下划线(例如用于表示键盘快捷键)
2. 默认值是 -1
3. 例如设置为 1,则说明在 Button 的第 2 个字符处画下划线underline=1 fg 前景色 fg=“pink” bg 背景色 bg=“pink” anchor 1. 控制文本(或图像)在 Label 中显示的位置
2. 默认为center,可选值为(n,s,w,e,ne,nw,sw,se,center)anchor=“center” justify 1. 定义如何对齐多行文本
2. 使用 “left”,“right” 或 “center”
3. 注意,文本的位置取决于 anchor 选项
4. 默认值是 “center”justify=“CENTER” width 1. 设置 Label 的宽度
2. 如果 Label 显示的是文本,那么单位是文本单元
3. 如果 Label 显示的是图像,那么单位是像素(或屏幕单元)
4. 如果设置为 0 或者干脆不设置,那么会自动根据 Label 的内容计算出宽度width=300 height 1. 设置 Label 的高度
2. 如果 Label 显示的是文本,那么单位是文本单元
3. 如果 Label 显示的是图像,那么单位是像素(或屏幕单元)
4. 如果设置为 0 或者干脆不设置,那么会自动根据 Label 的内容计算出高度height=200 image 1. 指定 Label 显示的图片
2. 该值应该是 PhotoImage,BitmapImage,或者能兼容的对象photo = tk.PhotoImage(file=“python.gif”)
w = tk.Label(root, image=photo).pack()padx 1. 指定 Label 水平方向上的额外间距(内容和边框间)
2. 单位是像素padx=50 pady 1. 指定 Label 垂直方向上的额外间距(内容和边框间)
2. 单位是像素pady=50 compound 1. 控制 Label 中文本和图像的混合模式
2. 默认情况下,如果有指定位图或图片,则不显示文本
3. 如果该选项设置为 “center”,文本显示在图像上(文本重叠图像)
4. 如果该选项设置为 “bottom”,“left”,“right” 或 “top”,那么图像显示在文本的旁边(如 “bottom”,则图像在文本的下方)
5. 默认值是 NONEcompound=‘center’ relief 1. 指定边框样式
2. 默认值是 “flat”
3. 另外你还可以设置 “groove”, “raised”, “ridge”, “solid” 或者 “sunken”relief=‘flat’ bd 1. 指定 Label 的边框宽度
2. 默认值由系统指定,通常是 1 或 2 像素textvariable 输入框内值,也称动态字符串,使用 StringVar() 对象来设置 dstr = tk.StringVar()
textvariable=dstr
按钮可以添加文本和图像。当按钮按下时,可以执行指定的函数。
语法格式:button=tk.Button(root,option)
可选项 说明 state 按钮状态选项,状态有’disabled’, ‘normal’, ‘active’ activebackground 当鼠标放上去时,按钮的背景色 activeforeground 当鼠标放上去时,按钮的前景色 bd 按钮边框的大小,默认为 2 个像素 bg 按钮的背景色 fg 按钮的前景色(按钮文本的颜色) font 文本字体,文字字号,文字字形。字形有overstrike/italic/bold/underline height 按钮的高度,如未设置此项,其大小以适应按钮的内容(文本或图片的大小) width 按钮的宽度,如未设置此项,其大小以适应按钮的内容(文本或图片的大小) image 按钮上要显示的图片,图片必须以变量的形式赋值给image,图片必须是gif格式。 justify 显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT, RIGHT, CENTER padx 按钮在x轴方向上的内边距(padding),是指按钮的内容与按钮边缘的距离 pady 按钮在y轴方向上的内边距(padding) relief 边框样式,设置控件显示效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。 wraplength 限制按钮每行显示的字符的数量,超出限制数量后则换行显示 underline 下划线。默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引 text 按钮的文本内容 command 按钮关联的函数,当按钮被点击时,执行该函数 anchor 控制文本所在的位置,默认为中心位置(CENTER)
Text 控件用于显示和编辑多行文本,而 Entry 控件则适合处理单行文本。
语法格式:text=tk.Text(root,option)
可选项 说明 应用 height 设置文本框的高度,高度值每加1则加一行 height=2 width 设置文本框的宽度,宽度值每加1则加一个字节 width=10 insert 文本框插入数据,可以指定插入数据的位置(指定默认数据) text.insert(‘0.0’, ‘12’) delete 删除文本框中的数据,可以通过数据位置,指定删除的数据 text.delete(“0.0”)删除一个
text.delete(“0.1”, “end”)删除全部get 获取文本框中的数据,可以通过数据位置,指定获取的数据 text.get(‘0.0’, ‘end’) relief 文本框样式,设置控件显示效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE relief=“ridge” bd 设置文本框的边框大小,值越大边框越宽 bd=5 bg 设置文本框默认背景色 bg=‘pink’ fg 设置文本框默认前景色,即字体颜色 fg=‘#ffffff’ font 文本字体,文字字号,文字字形。字形有overstrike/italic/bold/underline font=(‘黑体’, 18, bold) state 文本框状态选项,状态DISABLED/NORMAL,DISABLED状态文本框无法输入,NORMAL状态可以正常输入 state=‘disabled’ highlightcolor 设置文本框点击后的边框颜色 highlightcolor=‘yellow’ highlightthickness 设置文本框点击后的边框大小 highlightthickness=3 image_create 插入图片 photo = tk.PhotoImage(file=“mm.gif”)
text.image_create(‘1.0’, image=photo)exportselection 表示被选中的文本是否可以被复制到剪切板,若是 False 则表示不允许 默认值为 True insertbackground 设置插入光标的颜色 默认为 BLACK selectbackground 指定被选中文本的背景颜色 默认由系统决定 selectforeground 指定被选中文本的字体颜色 默认值由系统指定 textvariable 输入框内值,也称动态字符串,使用 StringVar() 对象来设置 dstr = tk.StringVar()
textvariable=dstr
Entry 控件作用就是允许用户输入内容,从而实现 GUI 程序与用户的交互,比如当用户登录软件时,输入用户名和密码,此时就需要使用 Entry 控件。
语法格式:entry=tk.Entry(root,option)
可选项 说明 width 设置文本框的宽度,宽度值每加1则加一个字节 insert 文本框插入数据,可以指定插入数据的位置 delete 删除文本框中的数据,可以通过数据位置,指定删除的数据 get 获取文本框中的数据,可以通过数据位置,指定获取的数据 relief 文本框样式,设置控件显示效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。 bd 设置文本框的边框大小,值越大边框越宽 bg 设置文本框默认背景色 fg 设置文本框默认前景色,即字体颜色 font 文本字体,文字字号,文字字形。字形有overstrike/italic/bold/underline state 文本框状态选项,状态有DISABLED/NORMAL,DISABLED状态文本框无法输入,NORMAL状态可以正常输入 highlightcolor 设置文本框点击后的边框颜色 highlightthickness 设置文本框点击后的边框大小 selectbackground 选中文字的背景颜色 selectborderwidth 选中文字的背景边框宽度 selectforeground 选中文字的颜色 show 指定文本框内容以何种样式的字符显示,比如密码可以将值设为 show=“*” textvariable 输入框内值,也称动态字符串,使用 StringVar() 对象来设置 dstr = tk.StringVar()
textvariable=dstr
安装(在终端输入以下命令,安装包文件):
pip install pyinstaller
打包(在终端输入以下命令,进行打包):
pyinstaller -F -w hello.py
pyinstaller -F hello.py # 执行exe文件时会出现cmd弹框 pyinstaller -F -w hellopy # 执行exe文件时没有出现cmd弹框 pyinstaller -F -i hello.py # 执行exe文件时没有弹框
1.先将所需要的图标转换为.py文件下的base64数组格式
import base64 open_icon = open("qq.ico","rb") #qq.icon为你要放入的图标 b64str = base64.b64encode(open_icon.read()) #以base64的格式读出 open_icon.close() write_data = "img=%s" % b64str f = open("qq.py","w+") #将上面读出的数据写入到qq.py的img数组中 f.write(write_data) f.close()
2.将qq.py导入到你的主文件中
import tkinter as tk from qq import img def setIcon(): tmp = open("tmp.ico", "wb+") tmp.write(base64.b64decode(img)) # 写入到临时文件中 tmp.close() root.iconbitmap("tmp.ico") # 设置图标 os.remove("tmp.ico") # 删除临死图标 root = tk.Tk() root.title("C语言中文网") root.geometry('450x150+100+100') root.resizable(0,0) setIcon() # 应用函数 # 显示窗口 root.mainloop()