# 《Python GUI设计 tkinter菜鸟编程》学习笔记,可直接执行代码
# 排版混乱,可设置Tab缩进为2个空格查看
# 此处整个笔记为python程序,可直接运,生成各类GUI示例。
from tkinter import *
# 创建窗口实例
root = Tk()
#也可以用 import tkinter ;root = tkinter.Tk()的形式,但所有对象的方法前都要加tkinter.
# 设置窗口标题
root.title("GUI_NOTE")
# 窗口大小
root.geometry("300x160")
#窗口居中的方法:
width = root.winfo_screenwidth() #获取屏幕宽度
height = root.winfo_screenheight() #获取屏幕高度
w = 300 #程序窗口的宽
h = 160
x = (width-w)/2
y = (height-160)/2
root.geometry("%dx%d+%d+%d" %(w,h,x,y))
# 窗口颜色
root.configure(bg='yellow')
"""
窗口相关方法 说明
title() 设置窗口标题
geometry("宽x高+x轴偏移+y轴便宜") 设置窗口大小和设置窗口在屏幕的位置
maxsize(宽,高) 拖拽时可以设置窗口最大的宽和高
minsize(宽,高) 拖拽时可以设置窗口最小的宽和高
configure(bg="color") 设置窗口背景颜色,也可以用16进制表示,详细查RGB色彩表
resizable(True,True) 设置是否更改窗口大小,第一个参数为宽,第二个为高;若固定窗口可以resizable(0,0)
state("zoomed") 最大化窗口
iconify() 最小化窗口
iconbitmap("xx.ico") 更改默认窗口图标
"""
# widget :控件、组件或部件,窗口建立后下一步创建控件
#---------------------------------------标签----------------------------------------
# 标签Label: Lable(父对象,options,....)父对象为窗口容器,option为可选参数:
"""
(1) anchor:如果空间大于标签时,控制标签位置,默认为center居中,n,ne,e,se,s,sw,w,nw(8个方向顺时针)
(2) bg:背景颜色
(3) bd:标签边界宽度,默认为1
(3) fg:前景色彩(即标签颜色或文字颜色)
(4) font:可选择字型样式和大小font参数包含以下内容(文本顺序写入,空格分隔;或者输入元组):
1.字形:如helvetica、times等可以在word内查询
2.大小:单位是像素(随着字体大小变化width、height也跟着联动变大变小)
3.weight:如 bold、normal(黑体、标准)
4.slant:只有italic和roman(倾斜)
5.underline:例如True、False (下划线)
6.overstrike:例如True、False (一种HTML排版 不懂)
(5) height:标签高度,单位是字符(即文本框高度)
(6) image:标签以图片的方式呈现
(7) text:标签内容,用换行符分行
(8) textvariable:可以设置标签以变量的方式显示
(9) underline:可以设置第几个文字有下划线,从0开始,默认为-1,表示无下划线
(10)width:标签宽度,单位是字符(即文本框宽度)
(11)wraplength:文本到多少宽度后换行,单位像素。
(12)justify:在多行的文本中设置最后一行的位置默认为center;left、right
(13)relief:可以控制标签的边框,可以应用在许多widget控件上,默认relief=FLAT;groove、raised、ridge、solid、sunken
(14)padx、pady:设置标签文字左右和上下边界与标签区间的x轴的距离(就是文字和“标签边框”的距离,不是和窗口的距离)
(15)compound:设置标签内图片和文字时彼此的位置关系,例如compound="lift"图像靠左,right,top,bottm,center(文字覆盖上面)
在设计程序时,可以将上面 参数作为属性设置
"""
label=Label(root,text="I like tkinter",bg='red',anchor="nw",fg="blue",height=3,
width=14,font=('times 20 normal'),relief='raised') #Label方法L必须大写
label.pack() #.pack() 包装窗口的widget控件和定位窗口对象
""" 直接label=Label().pack()窗口效果一样,但因为前面赋予了变量给label所以对象类型已经非
tkinter.Label,所以不建议合并一起修改;"""
#可以用photoimage()方法建立图像对象
imagebj = PhotoImage(file="xxx.png") #Label(root,image=imagebj)用图片作为标签
# 让程序持续运行,并进入等待与处理窗口事件(一般放在程序最后一行)
root.mainloop()
# config():widget的共同方法,更新或者补充widget属性的方法,用法和参数与label一样:
counter = 0 #计数的全局变量
def run_counter(digit):
"""一个计算器"""
def counting():
global counter # global 使用全局变量
counter += 1
digit.config(text=str(counter)) #用于更新或设置widget控件属性
digit.after(1000,counting) #隔一秒后调用counting
counting()
root2 = Tk()
root2.title("root2")
digit=Label(root2,bg="yellow",fg="blue",height=3,width=10,font=("helvetic 20 bold"))
digit.pack()
run_counter(digit) # 调用run_counter函数
print(digit.keys()) # keys()是widget的共同方法,可以打印Label()方法内所有的参数
digit.mainloop()
# separator() 分隔线,P30
#-----------------------------------窗口控件配置管理员-----------------------------------
"""在GUI设计中有三种方法包装和定位各组件在容器或窗口内的位置,这三种方法称为窗口控件管理员:
(1):pack()方法 ; (2):grid()方法 ; (3):place()方法"""
"""
一、pack()方法使用相对位置概念,控件的正确位置有pack方法自动完成,具体参数:
1.side:可以设置垂直或水平配置控件,默认为由上到下(TOP);由下往上(BOTTOM),
由左往右排列(LEFT),由右往左排列(RIGHT),多个控件还可以混合多种参数。
2.fill:参数告诉pack管理程序,设置控件填满所分配容器区间的方式,fill=X表示控件填满所分配的X轴不留白
fill=Y表示填满Y轴,fill=BOTH表示控件可以填满所有分配的空间,默认为NONE表示保持原大小。
3.padx/pady:参数设定控件边界与容器的距离或是控件边界之间的距离,默认窗口下距离是1像素,表示
当前控件与其他控件或容器边界的X轴和Y轴的距离
4.ipadx/ipady:参数可以控制标签文字与标签容器的XY的轴间距(就是文字与控件的距离)
5.anchor:设定widget控件在窗口总的位置,概念与标签中的anchor参数相似,区别在于此处是控件相对于
容器的位置,默认为center;N,NE,E,SE,S,SW,W,NW(8个方向顺时针,大写)
6.expand:参数设定widget控件是否填满额外的父容器空间,默认为False(或0),True或1表示填满(拉伸窗口填满)。
side、fill、expand参数相互影响
"""
# pack示例:
pack_ = Tk()
pack_.title("pack方法")
lab1 = Label(pack_,text="明志科技大学",bg="lightyellow")
lab2 = Label(pack_,text="长庚大学",bg="lightgreen")
lab3 = Label(pack_,text="长庚科技大学",bg="lightblue")
lab1.pack(side=LEFT,fill=Y) # 从左开始排泄,然后占满Y轴
lab2.pack(fill=X,padx=6) # 默认从上往下,然后占满X轴,与容器或控件边框的X轴间距设置为6
lab3.pack(fill=BOTH,expand=True) # 默认从上往下,XY轴全部占满,另外填充额外父容器空间。
print(pack_.pack_slaves()) #打印所有widget控件对象
# !!!!pack() 参数值不需要双引号和Label参数不同,同时注意大小写,基本全部为大写
pack_.mainloop()
"""
pack()为py tkinter中的一个类,所以他提供以下方法:
1.slaves():传回所有widget控件对象(不知道为什么和上面不一样)
2.forget():隐藏widget控件,可以用pack(option,..)复原显示
3.info():传回pack选项的对应值
4.location(x,y):传回词典是否在单元格内,如果是 传回左边,如果不是传回(-1,-1)
5.size():传回widget控件大小
6.propagate(boolean):参数是True表示父窗口大小由控件决定,默认为True
"""
# grdi()实现建立色彩标签:
color = Tk()
color.title("颜色")
colors = ["red","orange","yellow","green","blue","purple"]
r=0
for c in colors:
Label(color,text=c,relief="groove",width=20).grid(row=r,column=0)
Label(color,bg=c,relief="ridge",width=20).grid(row=r,column=1)
r += 1
[5]
color.mainloop()
"""
二、 grid()方法:是一种格状或类始于excel电子表格的包装和定位窗口组件的方法,具体参数:
1.row/column:相当于二维表格的行和列的意思(相同列的宽度根据当前列中宽度最大的,小的居中对齐);
2.columnspan:将某行的多个列的标签位置合并,xx.grid(row=0,column=1,columnspan=2)合并(0,1)和(0,2)
3.rowspan:将某列的多个行的的标签合并;
4.padx/pady:各控件间的距离,单位像素。
5.sticky:参数功能类似于anchor但只能设定N/S/W/E(上下左右),但sticky参数可以通过组合使用:
sticky=N+S:可以拉长高度让控件在顶端和低端对齐
sticky=W+E:可以拉长宽度让控件左边和右边对齐
sticky=N+S+E:可以拉长高度让控件在顶端和低端对齐,同时切齐右边
sticky=N+S+W:可以拉长高度让控件在顶端和低端对齐,同时切齐左边
sticky=N+S+W+E:可以拉长高度让控件在顶端和低端对齐,同时切齐左右两边
"""
"""
rowconfigure()和columnconfigure():使用这两个方法设定第几个row或column的缩放比例:
rowconfigure(0,weight=1): row 0的控件当窗口改变大小事时放比是1
columnconfigure(0,weight=1): column 0的控件当窗口改变大小时缩放比是1
"""
suofang = Tk()
suofang.title("缩放")
# 配合sticky参数使用,实现拉伸窗口时控件跟着扩展
suofang.rowconfigure(1,weight=1)
suofang.columnconfigure(0,weight=1)
lab1 = Label(suofang,text="Label_1",bg="pink")
lab1.grid(row=0,column=0,padx=5,pady=5,sticky=W)#修改为W+E拉伸窗口时同样会有扩展效果
lab2 = Label(suofang,text="Label_2",bg="lightblue")
lab2.grid(row=0,column=1,padx=5,pady=5)
lab3 = Label(suofang,bg="yellow")
lab3.grid(row=1,column=0,columnspan=2,padx=5,pady=5,sticky=N+S+W+E) #让上下左右对齐
suofang.mainloop()
"""
三、place()方法:直接指定将控件放在容器中的方法(使用绝对左边或相对坐标),具体参数:
1.x/y:直接指定控件位置,单位像素,左上角为(0,0)往右下角递增。
2.width/height:可以直接设定插入图像大小,单位像素
3.relx/rely:相对位置(相对于容器内的位置)值0.0~1.0,左上角两个参数值都是0
4.relwidth/relheitht:相对大小(相对于容器内的大小),值为0.0~1.0.
书上推荐使用spak和grid方法。
"""
#-----------------------------------功能按钮 Button----------------------------------
"""
Button(父对象,options,.....),具体参数:绝大部分参数与Label相同,下面几个特有的
1.highlightbackground:当功能按钮取得焦点时的背景颜色
2.highlightcolor:当功能按钮取得焦点时的颜色
3.command:单击功能按钮时,执行此方法。(执行相应函数)command=root.destroy(关闭root窗口,关闭程序),
quit(关闭py内部shell,但root窗口还在执行)
"""
def bColor(bgColor):
root.config(bg=bgColor)
root =Tk()
root.title("按钮,变色")
root.geometry("300x200")
exitbtn = Button(root,text="exit",command=root.destroy)
bluebtn = Button(root,text="blue",command=lambda:bColor("blue"))
yellowbtn = Button(root,text="yellow",command=lambda:bColor("yellow"))
exitbtn.pack(anchor=S,side=RIGHT,padx=5,pady=5)
bluebtn.pack(anchor=S,side=RIGHT,padx=5,pady=5)
yellowbtn.pack(anchor=S,side=RIGHT,padx=5,pady=5)
root.mainloop()
#----------------------------------------文本框 Entry-----------------------------------------
"""
Entry(父对象,option,.....):可输入的单行的文本框,大部分参数与Label相同,下面列取几个特殊的:
1.command:当用户更改内容时,会自动执行此函数。
2.exportselection:如果执行选取时,所选字符串会自动输入值剪贴板,如果想要避免,可以设置为0。
3.highlightbackground:当文本框获取焦点时的背景颜色(鼠标对着时)
4.highlightcolor:当文本框获取焦点是的文字颜色
5.selectbackground:被选取时字符串背景颜色。
6.selectborderwidth:被选取时边界宽度,预设是1.
7.selectfroeground:被选取是字符串颜色。
8.show:显示输入字符,例shou='*',类似于输入密码显示*号。
9.state:输入状态,NORMAL表示可以输入,DISABLE则表示无法输入
10.textvariable:文字变量
11.xscrollcommand:在X轴使用滚动条。
Entry的方法:
1.get():获取当前Entry的字符串类容
2.insert(index,s):在Entry文本框内建立默认文字,s是插入的字符串,index为插入index的位置;
通常作用在Entry()方法建立万文本框后。
3.delete(fast,last=None):删除Entry内从fast字符到last-1之间的字符,删除整个用delete(0,END)
4.eval():计算数学表达式函数,不能说是Entry的方法,是py通用函数,往括号内输入数学表达式字符串,输出结果。
"""
#创建一个获取输入框然后打印在pyshell上的函数
def printInfo():
print("Account: %s\npassword: %s" % (accountE.get(),pwdE.get()))
Entry_=Tk()
Entry_.title("文本框")
msg = "欢迎登录XXXXXX"
logo = Label(Entry_,text=msg)
accountL = Label(Entry_,text="Account")
accountL.grid(row=1) #tkinter会默认补上column=0
PwdL = Label(Entry_,text="Password")
PwdL.grid(row=2)
logo.grid(row=0,column=0,columnspan=2,pady=10,padx=10) #最上面的标签
accountE = Entry(Entry_)
pwdE = Entry(Entry_,show="*") #隐藏密码为*
accountE.insert(0,"请输入帐号") #输入框内默认文字
pwdE.insert(0,"请输入密码")
accountE.grid(row=1,column=1)
pwdE.grid(row=2,column=1,pady=10)
loginbtn = Button(Entry_,text="Login",command=printI
Python GUI设计 tkinter 笔记
最新推荐文章于 2024-08-09 04:00:59 发布
本文详细记录了使用Python的tkinter库进行GUI设计的过程,从基础组件的创建到事件处理,再到布局管理,深入浅出地介绍了如何构建交互式的桌面应用程序。
摘要由CSDN通过智能技术生成