Python基础入门学习笔记 067 GUI的终极选择:Tkinter4
实例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()