【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: 水平+垂直),是否在某个方向充满窗口
expand1可扩展,0不可扩展,代表控件是否会随窗口缩放

(二) grid()

属性说明
column组件所在的列起始位置(列号)
columnspan组件的列宽;跨列数(行跨列)
row组件所在的行起始位置(行号)
rowspan组件的行宽;rowspam=3 跨3行(列跨行)
sticky对齐方式:NSEW(北南东西)上下左右
padx、padyx方向间距、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=‘辞职人:正信’
font1.设置字体、字号、样式:
    bold(粗体) 默认值为normal(正常粗细);
    italic(斜体) 默认值为 roman(正常直立);
    underline(下划线),overstrike(删除线))。
2. 一个 Label 只能设置一种字体
3. 默认值由系统指定
font=(‘黑体’, 18, bold),
font=18
underline1. 跟 text 选项一起使用,用于指定哪一个字符画下划线(例如用于表示键盘快捷键)
2. 默认值是 -1
3. 例如设置为 1,则说明在 Button 的第 2 个字符处画下划线
underline=1
fg前景色fg=“pink”
bg背景色bg=“pink”
anchor1. 控制文本(或图像)在 Label 中显示的位置
2. 默认为center,可选值为(n,s,w,e,ne,nw,sw,se,center)
anchor=“center”
justify1. 定义如何对齐多行文本
2. 使用 “left”,“right” 或 “center”
3. 注意,文本的位置取决于 anchor 选项
4. 默认值是 “center”
justify=“CENTER”
width1. 设置 Label 的宽度
2. 如果 Label 显示的是文本,那么单位是文本单元
3. 如果 Label 显示的是图像,那么单位是像素(或屏幕单元)
4. 如果设置为 0 或者干脆不设置,那么会自动根据 Label 的内容计算出宽度
width=300
height1. 设置 Label 的高度
2. 如果 Label 显示的是文本,那么单位是文本单元
3. 如果 Label 显示的是图像,那么单位是像素(或屏幕单元)
4. 如果设置为 0 或者干脆不设置,那么会自动根据 Label 的内容计算出高度
height=200
image1. 指定 Label 显示的图片
2. 该值应该是 PhotoImage,BitmapImage,或者能兼容的对象
photo = tk.PhotoImage(file=“python.gif”)
w = tk.Label(root, image=photo).pack()
padx1. 指定 Label 水平方向上的额外间距(内容和边框间)
2. 单位是像素
padx=50
pady1. 指定 Label 垂直方向上的额外间距(内容和边框间)
2. 单位是像素
pady=50
compound1. 控制 Label 中文本和图像的混合模式
2. 默认情况下,如果有指定位图或图片,则不显示文本
3. 如果该选项设置为 “center”,文本显示在图像上(文本重叠图像)
4. 如果该选项设置为 “bottom”,“left”,“right” 或 “top”,那么图像显示在文本的旁边(如 “bottom”,则图像在文本的下方)
5. 默认值是 NONE
compound=‘center’
relief1. 指定边框样式
2. 默认值是 “flat”
3. 另外你还可以设置 “groove”, “raised”, “ridge”, “solid” 或者 “sunken”
relief=‘flat’
bd1. 指定 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、RIDGErelief=“ridge”
bd设置文本框的边框大小,值越大边框越宽bd=5
bg设置文本框默认背景色bg=‘pink’
fg设置文本框默认前景色,即字体颜色fg=‘#ffffff’
font文本字体,文字字号,文字字形。字形有overstrike/italic/bold/underlinefont=(‘黑体’, 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()

在这里插入图片描述
3.打包
可以参考上文《纯文本打包》

  • 9
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码字小萌新♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值