【Python】【Tkinter】图形界面设计(GUI)

一. 窗口创建及常见函数

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有特定的几何状态管理方法,管理整个控件区域组织,以下是公开的几何管理类:包,网格,位置;

(一) pack()

属性 说明
after 将组件置于其他组件之后
before 将组件置于其他组件之前
ancho 组件的对齐方式,顶对齐’n’,底对齐’s’,左’w’,右’e’
side 组件在主窗口的位置,可以为’top’,‘bottom’,‘left’,‘right’
(使用时tk.TOP,tk.LEFT)
fill 填充方式 (Y: 垂直; X: 水平;BOTH: 水平+垂直),是否在某个方向充满窗口
expand 1可扩展,0不可扩展,代表控件是否会随窗口缩放

(二) grid()

属性 说明
column 组件所在的列起始位置(列号)
columnspan 组件的列宽;跨列数(行跨列)
row 组件所在的行起始位置(行号)
rowspan 组件的行宽;rowspam=3 跨3行(列跨行)
sticky 对齐方式:NSEW(北南东西)上下左右
padx、pady x方向间距、y方向间距(padx=5)

(三) place()

属性 说明
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 组件
语法格式:

label=tk.Label(root,option)

option:可选项(即标签的可设置的属性),这些选项可以用键-值的形式设置,以逗号分隔;

可选项 说明 应用
text 设置文本内容,可以包含换行符(\n) text=‘辞职人:正信’
font 1.设置字体、字号、样式:
    bold(粗体) 默认值为normal(正常粗细);
    italic(斜体) 默认值为 roman(正常直立);
    underline(下划线),overstrike(删除线))。
2. 一个 Label 只能设置一种字体
3. 默认值由系统指定
font=(‘黑体’, 18, bold),
font=18
underline 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. 默认值是 NONE
compound=‘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按钮控件

按钮可以添加文本和图像。当按钮按下时,可以执行指定的函数。
语法格式:

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文本框控件

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输入控件

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

四. 打包成exe文件

(一) 纯文本打包

安装(在终端输入以下命令,安装包文件):
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()

【Python】【Tkinter】图形界面设计(GUI)_第1张图片
3.打包
可以参考上文《纯文本打包》

你可能感兴趣的:(python,python,开发语言)