Python基础入门学习笔记 067 GUI的终极选择:Tkinter4

发布时间 2023-08-23 11:39:04作者: 一杯清酒邀明月
实例1:
 1 from tkinter import *
 2 
 3 root = Tk()#创建主窗口
 4 e = Entry(root)#在主窗口中插入输入框
 5 e.pack(padx = 20,pady = 20)
 6 
 7 e.delete(0,END)#清空输入框
 8 e.insert(0,"默认文本...")#设置输入框内容
 9 
10 mainloop()

 实例2:

 1 from tkinter import *
 2 
 3 def button1_show():
 4     print("作品:《%s》" % e1.get())#将e1.get()中得到的输入框1的内容格式化为字符串
 5     print("作者:%s" % e2.get())
 6 
 7 root = Tk()#创建主窗口
 8 
 9 Label(root,text = "作品:",padx = 20,pady = 10).grid(row=0,column=0)#第1行第1列,偏移是相对于当前操作组件的相邻x轴或y轴的偏移距离
10 Label(root,text = "小甲鱼:").grid(row=1,column=0)#第1行第0列
11 
12 
13 e1 = Entry(root)#在主窗口中插入输入框,文本框的内容通过e1调用
14 e2 = Entry(root)#在主窗口中插入输入框
15 e1.grid(row=0,column=1,padx=10)#x方向偏移是相对于"作品"的x方向偏移的;y方向偏移表示此输入框与y方向相邻物体或边框之间偏移的距离(y方向偏移)
16 e2.grid(row=1,column=1,padx=10,pady=20)#x方向偏移是相对于"小甲鱼"的x方向偏移的;y方向偏移表示此输入框与y方向相邻上下物体或边框偏移的距离(y方向偏移)
17 
18 
19 #加两个按钮
20 Button1 = Button(root,text = "获取信息",command = button1_show)\
21           .grid(row = 2,column = 0,sticky = W,padx = 10,pady=10)#加入反斜杠可实现分行编辑,方位设置为最西边(即靠左)
22 Button2 = Button(root,text = "退出",command = root.quit).grid(row = 2,column = 1,sticky = E,padx=10)#方位设置为最东边(即靠右)
23 
24 #注:双击打开文件时退出才有效
25 e1.delete(0,END)#清空输入框
26 e1.insert(0,"零基础入门学习Python")#设置输入框内容
27 
28 e2.delete(1,END)#清空输入框
29 e2.insert(1,"小甲鱼")#设置输入框内容
30 
31 mainloop()

 按下获取信息

 更改输入框数据,然后按下获取信息

 实例2:账号密码设置

 1 from tkinter import *
 2 
 3 def show():
 4     print("作品:《%s》" % e1.get())#将e1.get()中得到的输入框1的内容格式化为字符串
 5     print("作者:%s" % e2.get())
 6     e1.delete(0,END)#清空输入框1
 7     e2.delete(0,END)#清空输入框2
 8 
 9 root = Tk()#创建主窗口
10 #Tkinter总共提供了三种布局组件的方法:pack()、grid()和place()
11 #grid()方法允许你用表格的形式来管理组件的位置
12 #row选项代表行,coulumn选项代表列
13 #row = 1,column = 2表示第二行第三列(0表示第一行)
14 
15 Label(root,text = "账号:").grid(row=0)#第1行
16 Label(root,text = "密码:").grid(row=1)#第2行
17 v1 = StringVar()
18 v2 = StringVar()
19 
20 e1 = Entry(root,textvariable = v1)#在主窗口中插入输入框,文本框的内容通过e1调用
21 e2 = Entry(root,textvariable = v2,show="*")#在主窗口中插入输入框
22 e1.grid(row=0,column=1,padx=10,pady=5)#x方向偏移是相对于"作品"的x方向偏移的;y方向偏移表示此输入框与y方向相邻物体或边框之间偏移的距离(y方向偏移)
23 e2.grid(row=1,column=1,padx=10,pady=5)#x方向偏移是相对于"小甲鱼"的x方向偏移的;y方向偏移表示此输入框与y方向相邻上下物体或边框偏移的距离(y方向偏移)
24 
25 
26 #可以使用sticky选项来设置组件的位置
27 #使用N、E、S、W以及他们的组合NE、SE、SW、NW来表示方位
28 
29 #加两个按钮
30 Button(root,text = "芝麻开门",command = show)\
31           .grid(row = 2,column = 0,sticky = W,padx = 10,pady=5)#加入反斜杠可实现分行编辑,方位设置为最西边(即靠左)
32 Button(root,text = "退出",command = root.quit).grid(row = 2,column = 1,sticky = E,padx=10)#方位设置为最东边(即靠右)
33 
34 mainloop()

 实例3:验证函数validatecommand

 1 from tkinter import *
 2 
 3 master = Tk()
 4 
 5 def test():
 6     if e1.get() == "小甲鱼":
 7         print("正确!")
 8         return True
 9     else:
10         print("错误!")
11         e1.delete(0, END)
12         return False
13 
14 v = StringVar()
15 
16 #focusout表示Entry组件失去焦点的时候验证,调用validatecommand的test函数
17 
18 e1 = Entry(master, textvariable=v, validate="focusout", validatecommand=test)
19 e2 = Entry(master)
20 e1.pack(padx=10, pady=10)
21 e2.pack(padx=10, pady=10)
22 
23 mainloop()

 实例4:invalidcommand函数

 1 from tkinter import *
 2 
 3 master = Tk()
 4 
 5 def test():
 6     if e1.get() == "小甲鱼":
 7         print("正确!")
 8         return True
 9     else:
10         print("错误!")
11         e1.delete(0, END)
12         return False
13 
14 def test2():
15     print("我被调用了...")
16 
17 v = StringVar()
18 
19 #focusout表示Entry组件失去焦点的时候验证,调用validatecommand的test函数
20 #invalidcommand选项指定的函数只有在validatecommand的返回值为False的时候才被调用
21 e1 = Entry(master, textvariable=v, validate="focusout", validatecommand=test,\
22            invalidcommand=test2)
23 e2 = Entry(master)
24 e1.pack(padx=10, pady=10)
25 e2.pack(padx=10, pady=10)
26 
27 mainloop()

 实例5:验证函数提供一些额外的选项

validatecommand(f,s1,s2,...)

其中,f是验证函数名,s1,s2,s3是额外的选项,这些选项会作为参数一次传给f函数。在此之前,需要调用register()方法将验证函数包装起来。

 1 from tkinter import *
 2 
 3 master = Tk()
 4 
 5 v = StringVar()
 6 
 7 def test(content, reason, name):
 8     if content == "小甲鱼":
 9         print("正确!")
10         print(content, reason, name)
11         return True
12     else:
13         print("错误!")
14         print(content, reason, name)
15         return False
16 
17 testCMD = master.register(test)
18 e1 = Entry(master, textvariable=v, validate="focusout", \
19            validat
20            ecommand=(testCMD, '%P', '%v', '%W'))
21 e2 = Entry(master)
22 e1.pack(padx=10, pady=10)
23 e2.pack(padx=10, pady=10)
24 
25 mainloop()

 实例6:设计一个 计算器

 1 from tkinter import *
 2 #计算函数
 3 def calc():
 4     result = int(v1.get())+int(v2.get())#强制转换为整型
 5     v3.set(result)#将result中的内容放到v3中
 6 
 7 #创建窗口
 8 root = Tk()
 9 #创建窗口中的一个frame框架
10 frame = Frame(root)
11 #设置框架位置并显示
12 frame.pack(padx = 10,pady = 10)
13 
14 v1 = StringVar()
15 v2 = StringVar()
16 v3 = StringVar()
17 
18 #注意,这里不能使用e1.get()或者v1.get()来获取输入的内容,因为validate选项
19 #指定为“key"的时候,有任何输入操作都会被拦截到这个函数中
20 #也就是说先拦截,只有这个函数返回True,那么输入的内容才会到变量里去
21 #所以要用%P来获取最新的输入框内容
22 def test(content):
23     if content.isdigit():
24         return True
25     else:
26         return False
27 
28 #创建三个Entry组件
29 testCMD = frame.register(test)
30 #创建2个输入组件,输入的数据赋值给v1、v2
31 e1 = Entry(frame, textvariable=v1,width=10, validate="key",\
32            validatecommand=(testCMD, '%P'))
33 e2 = Entry(frame, textvariable=v2,width=10, validate="key",\
34            validatecommand=(testCMD, '%P'))
35 #一个输出组件,设置为只读模式(readonly),v3的数据赋值给textvariable进行输出显示
36 e3 = Entry(frame, textvariable=v3,width=10, validate="key",\
37            validatecommand=(testCMD, '%P'),state="readonly")
38 #位置设置
39 e1.grid(row=0,column=0,padx=10,pady=10)
40 e2.grid(row=0,column=2,padx=10)
41 e3.grid(row=0,column=4,padx=10)
42 
43 #创建两个Label组件
44 Label(frame,text="+").grid(row=0,column=1)
45 Label(frame,text="=").grid(row=0,column=3)
46 
47 #创建一个按钮,宽度为10
48 button=Button(frame,text="计算结果",width=10,command=calc)
49 button.grid(row=1,column=2,pady=10)
50 
51 mainloop()