Radiobutton组件
Radiobutton组件跟Checkbutton组件的用法基本一致,唯一不同的是Radiobutton实现的是“单选”的效果。
要实现这种互斥的效果,同组内的所有Radiobutton只能共享一个variable选项,并且需要设置不同的value选项值。
注释掉的也是一种方法
import tkinter as tkroot = tk.Tk()v=tk.IntVar()#tk.Radiobutton(root,text="One",variable=v,value=1).pack(anchor=tk.W)#tk.Radiobutton(root,text="Two",variable=v,value=2).pack(anchor=tk.W)#tk.Radiobutton(root,text="Three",variable=v,value=3).pack(anchor=tk.W)texts=["One","Two","Three"]i=1for text in texts:tk.Radiobutton(root,text=text,variable=v,value=i).pack(anchor=tk.W)i+=1tk.mainloop()------------------------------------------------------------------------import tkinter as tkroot = tk.Tk()v=tk.IntVar()v.set(1)#set的括号里是1的话,一开始的默认选项在1;括号里是2的话,默认选项在2;如果超过了4,则没有默认选项langs = [("One",1),("Two",2),("Three",3)]for lang,num in langs:tk.Radiobutton(root,text=lang,variable=v,value=num).pack(anchor=tk.W)tk.mainloop()
也可以把前面的小圆圈换成按钮的形式
#在for循环进行改动for text in texts:tk.Radiobutton(root,text=text,variable=v,value=i,indicatoron=False).pack(fill=tk.X)i+=1
LabelFrame组件
LabelFrame组件是Frame框架的进化版,从形态上来说,也就是添加了Label的Frame,有了它,Checkbutton和Radiobutton的组件分组就变得简单了;
import tkinter as tkroot = tk.Tk()group = tk.LabelFrame(root,text="最好的脚本语言是?",padx=5,pady=5)group.pack(padx=10,pady=10)langs=[("python",1),("Perl",2),("Ruby",3),("Lua",4)]v=tk.IntVar()v.set(2)for lang,num in langs:b=tk.Radiobutton(group,text=lang,variable=v,value=num)b.pack(anchor=tk.W)#print(lang," ",num," ",v)tk.mainloop()
Entry组件
Entry组件就是平时所说的输入框。
import tkinter as tkroot = tk.Tk()#Tkinter总共提供三种布局组件的方法:pack(),grid()和place()#grid()允许你用表格的形式来管理组件的位置#row选项代表行,column选项代表列#例如row=1,column=2表示第二行第三列photo = tk.PhotoImage(file="E:\\GUI\\background.gif")tk.Label(root,text="作品:").grid(row=0)tk.Label(root,text="作者:").grid(row=1)e1=tk.Entry(root)e2=tk.Entry(root)e1.grid(row=0,column=1,padx=15,pady=15)e2.grid(row=1,column=1,padx=15,pady=15)#该处可以调节窗口大小def show():print("作品《%s》"% e1.get())print("作者:%s"% e2.get())e1.delete(0,tk.END)e2.delete(0,tk.END)#在点击获取信息后会清空#如果表格大于组件,那么可以使用sticky选项来设置组件的位置#同样需要使用N,E,S,W以及它们的组合NE,SE,SW,NWtk.Button(root,text="获取信息",width=10,command=show)\.grid(row=2,column=0,sticky=tk.W,padx=10,pady=5)tk.Button(root,text="退出",width=10,command=root.quit)\.grid(row=2,column=1,sticky=tk.E,padx=10,pady=5)tk.mainloop()
可以不停的点击获取信息,直到点击退出为止
如果想要设置一个密码框,即使用“ * ”代替输入的内容,只需要设置show选项即可
import tkinter as tkroot = tk.Tk()#Tkinter总共提供三种布局组件的方法:pack(),grid()和place()#grid()允许你用表格的形式来管理组件的位置#row选项代表行,column选项代表列#例如row=1,column=2表示第二行第三列tk.Label(root,text="账号:").grid(row=0)tk.Label(root,text="密码:").grid(row=1)v1=tk.StringVar()v2=tk.StringVar()e1=tk.Entry(root,textvariable=v1)e2=tk.Entry(root,textvariable=v2,show="*")'''e1=tk.Entry(root)e2=tk.Entry(root,show="*")'''e1.grid(row=0,column=1,padx=15,pady=15)e2.grid(row=1,column=1,padx=15,pady=15)#该处可以调节窗口大小def show():print("账号: %s"% v1.get())print("密码: %s"% v2.get())e1.delete(0,tk.END)e2.delete(0,tk.END)#在点击获取信息后会清空'''def show():print("账号: %s"% e1.get())print("密码: %s"% e2.get())e1.delete(0,tk.END)e2.delete(0,tk.END)#在点击获取信息后会清空'''#如果表格大于组件,那么可以使用sticky选项来设置组件的位置#同样需要使用N,E,S,W以及它们的组合NE,SE,SW,NWtk.Button(root,text="获取信息",width=10,command=show)\.grid(row=2,column=0,sticky=tk.W,padx=10,pady=5)tk.Button(root,text="退出",width=10,command=root.quit)\.grid(row=2,column=1,sticky=tk.E,padx=10,pady=5)tk.mainloop()
另外,Entry组件还支持验证输入内容的合法性。(要求输入的是数字,输入字母就是“非法的”)。
实现该功能可以通过:validate,validatecommand,invalidecommmand。
首先用验证的开关是:validate选项。
下表是validate选项可以设置的值
其次是validatecommand选项指定一个验证函数,该函数只能返回True或者False表示验证结果。
最后是invalidatecommand选项指定的函数只有在validatecommmand的返回值为False时才会执行。
import tkinter as tkroot = tk.Tk()def test():if e1.get() == "小甲鱼":print("正确")return Trueelse:print("错误")e1.delete(0,END)return Falsev = tk.StringVar()e1 = tk.Entry(root,textvariable=v,validate="focusout",validatecommand=test)e2 = tk.Entry(root)e1.pack(padx=10,pady=10)e2.pack(padx=10,pady=10)tk.mainloop()
Tkinter为验证函数提供了一些额外的选项
import tkinter as tkroot = tk.Tk()v=tk.StringVar()def test(content,reason,name):if content == "小甲鱼":print("RIGHT!")print(content,reason,name)return Trueelse:print("WRONG!")print(content,reason,name)return FalsetestCMD = root.register(test)e1 = tk.Entry(root,textvariable=v,validate="focusout",validatecommand=(testCMD,"%P","%v","%W"))e2 = tk.Entry(root)e1.pack(padx=10,pady=10)e2.pack(padx=10,pady=10)tk.mainloop()
如果觉得《【Python】Radiobutton组件 LabelFrame组件 Entry组件》对你有帮助,请点赞、收藏,并留下你的观点哦!