6.5、单选按钮:(Radiobutton)
是为了响应故乡排斥的若干单选项的单击事件以触发运行自定义函数所设的,该控件排除具有共有属性外,还具有显示文本(text)、返回变量(variable)、返回值(value)、响应函数名(command)等重要属性。响应函数名“command=函数名”的用法与Button相同,函数名最后也要加括号。返回变量variable=var通常应预先声明变量的类型var=IntVar()或var=StringVar(),在所调用的函数中方可用var.get()方法获取被选中实例的value值。例如下面:
from tkinter import * def Mysel(): dic = {0:'甲',1:'乙',2:'丙'} s = "您选了" + dic.get(var.get()) + "项" lb.config(text = s) root = Tk() root.title('单选按钮') lb = Label(root) lb.pack() var = IntVar() rd1 = Radiobutton(root,text="甲",variable=var,value=0,command=Mysel) rd1.pack() rd2 = Radiobutton(root,text="乙",variable=var,value=1,command=Mysel) rd2.pack() rd3 = Radiobutton(root,text="丙",variable=var,value=2,command=Mysel) rd3.pack() root.mainloop()
6.6、列表框 与 组合框:
列表框:(Listbox) 可供用户单选或多选所列条目以形成人机交互。列表框控件的主要方法见下面的表:
执行自定义函数时,通常使用“实例名.surselection()” 或 “selected” 来获取选中项的位置索引。由于列表框实质上就是将Python 的列表类型数据可视化呈现,在程序实现时,也可直接对相关列表数据进行操作,然后再通过列表框展示出来,而不必拘泥于可视化控件的方法。看下面的一个例子:实现列表框的初始化、添加、插入、修改、删除和清空操作,如下:
from tkinter import * def ini(): Lstbox1.delete(0,END) list_items = ["数学","物理","化学","语文","外语"] for item in list_items: Lstbox1.insert(END,item) def clear(): Lstbox1.delete(0,END) def ins(): if entry.get() != '': if Lstbox1.curselection() == (): Lstbox1.insert(Lstbox1.size(),entry.get()) else: Lstbox1.insert(Lstbox1.curselection(),entry.get()) def updt(): if entry.get() != '' and Lstbox1.curselection() != (): selected=Lstbox1.curselection()[0] Lstbox1.delete(selected) Lstbox1.insert(selected,entry.get()) def delt(): if Lstbox1.curselection() != (): Lstbox1.delete(Lstbox1.curselection()) root = Tk() root.title('列表框实验') root.geometry('320x240') frame1 = Frame(root,relief=RAISED) frame1.place(relx=0.0) frame2 = Frame(root,relief=GROOVE) frame2.place(relx=0.5) Lstbox1 = Listbox(frame1) Lstbox1.pack() entry = Entry(frame2) entry.pack() btn1 = Button(frame2,text='初始化',command=ini) btn1.pack(fill=X) btn2 = Button(frame2,text='添加',command=ins) btn2.pack(fill=X) btn3 = Button(frame2,text='插入',command=ins) # 添加和插入功能实质上是一样的 btn3.pack(fill=X) btn4 = Button(frame2,text='修改',command=updt) btn4.pack(fill=X) btn5 = Button(frame2,text='删除',command=delt) btn5.pack(fill=X) btn6 = Button(frame2,text='清空',command=clear) btn6.pack(fill=X) root.mainloop()
组合框:(Combobox) 实质上是带文本框的上拉列表框,其功能也将是Python 的列表类型数据可视化呈现,并提供用户单选或多选所列条目以形成人机交互。在图形化界面设计时,由于其具有灵活的界面,因此往往比列表框更受喜爱。但该控件并不包含在 tkinter 模块中,而是与 TreeView、Progressbar、Separator等控件一同包含在tkinter 的子模块ttk中。如果使用该控件,应先与from tkinter import ttk 语句引用ttk子模块,然后创建组合框实例: 实例名=Combobox(根对象,[属性列表])
指定变量var=StringVar(),并设置实例属性 textvariable = var,values=[列表...]。组合框控件常用方法有:获得所选中的选项值get()和获得所选中的选项索引current()。
看下面的一个例子:实现四则运算计算器,将两个操作数分别填入两个文本框后,通过选择组合框中的算法触发运算,如下:
from tkinter.ttk import * from tkinter import * def calc(event): a = float(t1.get()) b = float(t2.get()) dic = {0:a+b,1:a-b,2:a*b,3:a/b} c = dic[comb.current()] lbl.config(text=str(c)) root = Tk() root.title('四则运算') root.geometry('320x240') t1 = Entry(root) t1.place(relx=0.1,rely=0.1,relwidth=0.2,relheight=0.1) t2 = Entry(root) t2.place(relx=0.5,rely=0.1,relwidth=0.2,relheight=0.1) var = StringVar() comb = Combobox(root,textvariable=var,values=['加','减','乘','除',]) comb.place(relx=0.1,rely=0.5,relwidth=0.2) comb.bind('<<ComboboxSelected>>',calc) lbl=Label(root,text='结果') lbl.place(relx=0.5,rely=0.7,relwidth=0.2,relheight=0.3) root.mainloop()