

○ 方法:利用函数中的 if-else 分支实现多项显示
from tkinter import *
import tkinter
def run():
if(CheckVar1.get()==0 and CheckVar2.get()==0 and CheckVar3.get()==0 and CheckVar4.get()==0):
s = \'您还没选择任何爱好项目\'
else:
s1 = "足球" if CheckVar1.get()==1 else ""
s2 = "篮球" if CheckVar2.get() == 1 else ""
s3 = "游泳" if CheckVar3.get() == 1 else ""
s4 = "田径" if CheckVar4.get() == 1 else ""
s = "您选择了%s %s %s %s" % (s1,s2,s3,s4)
lb2.config(text=s)
root = tkinter.Tk()
root.title(\'复选框\')
lb1=Label(root,text=\'请选择您的爱好项目\')
lb1.pack()
CheckVar1 = IntVar()
CheckVar2 = IntVar()
CheckVar3 = IntVar()
CheckVar4 = IntVar()
ch1 = Checkbutton(root,text=\'足球\',variable = CheckVar1,onvalue=1,offvalue=0)
ch2 = Checkbutton(root,text=\'篮球\',variable = CheckVar2,onvalue=1,offvalue=0)
ch3 = Checkbutton(root,text=\'游泳\',variable = CheckVar3,onvalue=1,offvalue=0)
ch4 = Checkbutton(root,text=\'田径\',variable = CheckVar4,onvalue=1,offvalue=0)
ch1.pack()
ch2.pack()
ch3.pack()
ch4.pack()
btn = Button(root,text="OK",command=run)
btn.pack()
lb2 = Label(root,text=\'\')
lb2.pack()
root.mainloop()
3.5 列表框 与 组合框
3.5.1 列表框
(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()
3.5.2 组合框
(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 *
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()
3.6 滑块