1.复选框

复选框(Checkbutton)是为返回多个选项值的交互控件,通常并不直接触发函数的执行。该控件除具有共同属性外,还具有显示文本(text)、返回变量(variable)、选中返回值(onvalue)和未选中默认返回值(offvalue)等重要的属性。

返回变量variable=var通常可以预先逐项分别声明变量的类型var=IntVar()(默认)或var=StringVar(),在所调用的函数中方可分别用var.get()方法取得被选中实例的onvalue或offvalue值。

复选框实例通常还可分别利用select()、deselect()和toggle()方法对其进行选中、清除选中和反选操作。

利用复选框实现,单击“OK”按钮后,可以将选中结果显示在标签上,

方法1:在函数中用if-else分支实现多项显示。

from tkinter import *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)window = Tk()
lb1 = Label(window, text="请选择您的爱好项目:")
lb1.pack()
CheckVar1 = IntVar()
CheckVar2 = IntVar()
CheckVar3 = IntVar()
CheckVar4 = IntVar()
ch1 = Checkbutton(window, text="足球", variable=CheckVar1, onvalue=1, offvalue=0)
ch2 = Checkbutton(window, text="篮球", variable=CheckVar2, onvalue=1, offvalue=0)
ch3 = Checkbutton(window, text="游泳", variable=CheckVar3, onvalue=1, offvalue=0)
ch4 = Checkbutton(window, text="骑行", variable=CheckVar4, onvalue=1, offvalue=0)
ch1.pack()
ch2.pack()
ch3.pack()
ch4.pack()
btn = Button(window, text="OK", command=run)
btn.pack()
lb2 = Label(window, text='')
lb2.pack()
window.mainloop()

方法2:利用列表和字典实现多项显示。

由于Python程序中没有其他语言的switch或case这样的枚举分支,当选项较多时,用if-else分支实现会较为烦琐,可充分利用Python特有的列表、字典等数据类型使程序更加简洁高效。本例中还添加了全选、反选和重置按钮:

from tkinter import *def run():dic = {0: '', 1: '足球', 2: '篮球', 3: '游泳', 4: '骑行'}chknum = {CheckVar1.get(), CheckVar2.get(), CheckVar3.get(), CheckVar4.get()}s = ''for i in chknum:s += dic.get(i)if s == '':s = "您没有选择任何爱好项目"else:s = "您选择了" + slb2.config(text=s)def all():ch1.select()ch2.select()ch3.select()ch4.select()def invert():ch1.toggle()ch2.toggle()ch3.toggle()ch4.toggle()def cancel():ch1.deselect()ch2.deselect()ch3.deselect()ch4.deselect()window = Tk()
lb1 = Label(window, text="请选择您的爱好项目:")
lb1.pack()
CheckVar1 = IntVar()
CheckVar2 = IntVar()
CheckVar3 = IntVar()
CheckVar4 = IntVar()
ch1 = Checkbutton(window, text="足球", variable=CheckVar1, onvalue=1, offvalue=0)
ch2 = Checkbutton(window, text="篮球", variable=CheckVar2, onvalue=2, offvalue=0)
ch3 = Checkbutton(window, text="游泳", variable=CheckVar3, onvalue=3, offvalue=0)
ch4 = Checkbutton(window, text="骑行", variable=CheckVar4, onvalue=4, offvalue=0)
ch1.pack()
ch2.pack()
ch3.pack()
ch4.pack()
btninvert = Button(window, text="反选", command=invert)
btninvert.pack(side=RIGHT)
btnall = Button(window, text="全选", command=all)
btnall.pack(side=RIGHT)
btncancel = Button(window, text="重置", command=cancel)
btncancel.pack()
btn = Button(window, text="OK", command=run)
btn.pack()
lb2 = Label(window, text='')
lb2.pack()
window.mainloop()

2.列表框与组合框

列表框(Listbox)可供用户单选或多选所列条目以形成人机交互。列表框控件的主要方法:

执行自定义函数时,通常使用“实例名.curselection()”或“selected”来获取选中项的位置索引。

由于列表框实质上就是将Python的列表类型数据可视化呈现,在程序实现时,也可直接将相关列表数据进行操作,然后再通过列表框展示出来,而不必拘泥于可视化控件的方法。

实现列表框的初始化、添加、插入、修改、删除和清空操作:

from tkinter import *
import tkinterdef 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())window = Tk()
window.title('列表框学习')
window.geometry('320x240')
frame1 = Frame(window, relief=RAISED)
frame1.place(relx=0.0)
frame2 = Frame(window, 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)
window.mainloop()

若不使用按钮,也可对列表控件实例绑定鼠标事件,触发自定义函数的执行,自定义函数应以event作为参数以获取鼠标的选中项目索引。之后还将学习“事件响应”。通常,绑定的鼠标事件是鼠标左键的释放(不是单击,释放时才选中列表框选项)。例如:

Lstbox1.bind('<ButtonRelease-1>',myfunc)

单击课程或学分的列表框均可联动实现选课,并将所选课程和学分追加呈现在文本框中:

from tkinter import *def ini():list_items = ["数学", "物理", "化学", "语文", "外语"]for item in list_items:Lstbox1.insert(END, item)list_credits = [2.0, 2.5, 1.0, 1.5, 2.0]for item in list_credits:Lstbox2.insert(END, item)def slecurse1(event):s = '已选' + Lstbox1.get(Lstbox1.curselection()) + str(Lstbox2.get(Lstbox1.curselection())) + '学分\n'txt.insert(END, s)def slecurse2(event):s = '已选' + Lstbox1.get(Lstbox2.curselection()) + str(Lstbox2.get(Lstbox2.curselection())) + '学分\n'txt.insert(END, s)window = Tk()
window.title('单击课程或学分均可选课')
window.geometry('320x240')
frame1 = Frame(window, relief=RAISED)
frame1.place(relx=0.0)
frame2 = Frame(window, relief=GROOVE)
frame2.place(relx=0.3)
frame3 = Frame(window, relief=RAISED)
frame3.place(relx=0.6)Lstbox1 = Listbox(frame1)
Lstbox1.bind('<ButtonRelease-1>', slecurse1)
Lstbox1.pack()
Lstbox2 = Listbox(frame2)
Lstbox2.bind('<ButtonRelease-1>', slecurse2)
Lstbox2.pack()txt = Text(frame3, height=14, width=18)
txt.pack()
ini()
window.mainloop()

组合框(Combobox)实质上是带文本框的下拉列表框,其功能也是将Python的列表类型数据可视化呈现,并提供用户单选或多选所列条目以形成人机交互。在图形化界面设计时,由于其具有灵活的界面,因此往往比列表框更受喜爱。但该控件并不包含在tkinter的子模块ttk中。

如果要使用该控件,应先用from tkinter import ttk语句引用ttk子模块,然后创建组合框实例:

实例名=Combobox(根对象,[属性列表])

绑定变量var=tkinter.StringVar(),并设置实例属性textvariable=var,values=[列表...]。

组合框控件的常用方法有:获得所选中的选项值get()和获得所选中的选项索引current()。

若不使用按钮,也可对组合框控件实例绑定事件,触发自定义函数的执行,自定义函数应以event作为参数以获取所选中项目索引。通常,绑定的事件是组合框中某选项被选中(注意,事件的代码是用两个小于号和两个大于号作为界定符的)。例如:

comb1.bind('<<ComboboxSelected>>',myfunc)

实现四则运算计算器,将两个操作数分别填入两个文本框后,通过选择组合框中的算法触发运算:

from tkinter import *
from tkinter.ttk import *def calc(event):a = float(t1.get())b = float(t2.get())dic = {0: a + b, 1: a - b, 2: a * 3, 3: a / b}c = dic[comb.current()]lb1.config(text=str(c))window = Tk()
window.title('四则运算')
window.geometry('320x240')t1 = Entry(window)
t1.place(relx=0.1, rely=0.1, relwidth=0.2, relheight=0.1)
t2 = Entry(window)
t2.place(relx=0.5, rely=0.1, relwidth=0.2, relheight=0.1)
var = StringVar()
comb = Combobox(window, textvariable=var, values=['加', '减', '乘', '除'])
comb.place(relx=0.1, rely=0.5, relwidth=0.2)
comb.bind('<<ComboboxSelected>>', calc)
lb1 = Label(window, text='结果')
lb1.place(relx=0.5, rely=0.7, relwidth=0.2, relheight=0.3)
window.mainloop()

通常,大型软件设计分为程序编码设计和用户界面(User Interface,UI)设计两个部分,它们分属于不同团队。上述四则运算计算器也可用下面代码,运用面向对象程序设计的思想,实现界面设计与业务逻辑的相互独立。这里,Ui类负责程序界面的布局,而App类作为Ui的子类,完成运算处理。

from tkinter import *
from tkinter.ttk import *class Ui(Frame):""" 生成界面的类 """def __init__(self, master=None):Frame.__init__(self, master)self.master.title('四则运算')self.master.geometry('320x240')self.createWidgets()def createWidgets(self):self.top = self.winfo_toplevel()self.Text1 = Entry(self.top)self.Text1.place(relx=0.1, rely=0.1, relwidth=0.3, relheight=0.1)self.Text2 = Entry(self.top)self.Text2.place(relx=0.5, rely=0.1, relwidth=0.3, relheight=0.1)self.CombolList = ['加', '减', '乘', '除']self.CombolVar = StringVar(value='加')self.Combol = Combobox(self.top, textvariable=self.CombolVar, values=self.CombolList)self.Combol.place(relx=0.1, rely=0.5, relwidth=0.4)self.Combol.bind('<<ComboboxSelected>>', self.calc)self.Label1 = Label(self.top)self.Label1.place(relx=0.5, rely=0.6, relwidth=0.4, relheight=0.2)class App(Ui):""" 继承Ui,为Ui的子类,处理业务逻辑 """def __init__(self, master=None):Ui.__init__(self, master)def calc(self, event):a = float(self.Text1.get())b = float(self.Text2.get())dic = {0: a + b, 1: a - b, 2: a * b, 3: a / b}c = dic[self.Combol.current()]self.Label1.config(text=str(c))if __name__ == '__main__':top = Tk()gui = App(top)  # 实例化gui.mainloop()

使用tkinter开发GUI程序4 -- tkinter常见控件的特征属性(第二部分)相关推荐

  1. python怎么开发gui程序_第一个GUI程序

    Python GUI 开发有好几个第三方的库,我选择的是tkinter 最简单的一个GUI程序 import tkinter as tk//给库来个简写,用的时候简洁一点 root = tk.Tk() ...

  2. 用Java开发桌面应用程序(Swing开发GUI程序)

    前面学过了面向对象基本概念.面向对象基本特征.Java基本包和API:异常.多线程.IO等. 基本概念 Swing:java中的一个包,负责开发GUI程序 GUI:图形用户界面,一般指可视化桌面系统中 ...

  3. Windows10下VB6.0开发——常见控件使用整理

    前言:以下整理了一些常见控件的使用,关于串口通信的控件的使用,在之前文章介绍过. 1. 单选按钮 -- OptionButton   有很多场景中会需要用到单选按钮,使用单选按钮的基本原则是:在同一个 ...

  4. VS2010下ocx开发:(2)在C#程序中调用ocx控件

    在本文中,给出一个C#示例程序,调用上一篇博文中创建的MultiplyDemo.ocx控件.注意需要保证该控件已经注册过. 启动Visual Studio 2010,使用C#创建一个Windows窗体 ...

  5. android控件使用大全,Android常见控件使用详解

    本文实例为大家分享了六种Android常见控件的使用方法,供大家参考,具体内容如下 1.TextView 主要用于界面上显示一段文本信息 2.Button 用于和用户交互的一个按钮控件 //为Butt ...

  6. [Android Studio]掌握Android Studio的五种常见控件和五种常见布局

    目录 一.View和ViewGroup 二.Android的五种常见控件 2.1 文本控件 2.1.1 TextView 2.1.2 EditText 2.2 按钮控件 2.2.1 Button 2. ...

  7. iOS 9应用开发教程之使用开关滑块控件以及滚动部署视图

    iOS 9应用开发教程之使用开关滑块控件以及滚动部署视图 使用ios9中的开关.滑块控件 开关和滑块也是用于和用户进行交互的控件.本节将主要讲解这两种控件. ios9开关 开关控件常用来控制某个功能的 ...

  8. 微信小程序wepy自定义card控件封装

    微信小程序wepy自定义card控件 在利用wepy开发小程序的过程中,需要使用自定义控件来实现,但是很多时候,若直接在page页面中写对应的控件,下次在另一个页面中,想使用同样的控件又需要重新绑定数 ...

  9. 软件测试多次点击按钮叫什么方法,常见控件的测试点 - 爱昵容儿 的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    视频:软件测试--常见控件测试之一 源文档 > 视频:软件测试--常见控件测试之三 源文档 常见控件的测试和常见功能点击系统权限 常见控件的名称和测试方法 文本框:用文字工具划出画出来的,用来编 ...

最新文章

  1. 刚刚,2021中国最好学科排名发布:北大、清华、人大中国顶尖学科居前三
  2. 中西三大差距根源在哪里?
  3. js怎么获取访问页数记录(知道的能不能告诉我一下)
  4. SAP后台作业记录操作
  5. 网站刷关键词_中小企业网站排名如何做SEO优化 - 刷百度关键词排名
  6. centos 日志审计_Linux\CentOS中auditd安全审计工具的使用
  7. JMeter打开jmx文件出错CannotResolveClassException: org.apache.jmeter.protocol.ssh.sampler.SSHCommandSampler
  8. matlab中的lower,请问:MATLAB中,有实现Gabor变换的函数吗?
  9. mysql数据库开发要求_MYSQL数据库开发规范
  10. 【kafka】Replication factor: 1 larger than available brokers:0
  11. BZOJ1195[HNOI2006]最短母串——AC自动机+BFS+状态压缩
  12. mongodb创建集合命令db.createCollection详解
  13. editplus 格式java_用Editplus开发Java
  14. shopex 小知识
  15. 2021年遥感类SCI期刊JCR分区/中科院分区排名与影响因子汇总
  16. 通过串口波特率计算数据传输速率(每秒字节数)
  17. 微信小程序商城API文档
  18. android内窥镜安装软件,DEPSTECH内窥镜app
  19. 世界银行公布各国1996-2018年GDP及GDP增长率
  20. Java 基础系列(七) --- 透彻学习Java的接口

热门文章

  1. Android项目打包成aar文件并在其他项目引用,作为依赖包
  2. 百度总裁张亚勤宣布10月退休,李彦宏的人才建设要加紧了...
  3. base64转cer_常见证书格式及相互转换
  4. if结构与switch结构
  5. 一个妹子的考研倒计时一百天
  6. 「免费版Axure」原型设计工具!
  7. UCAS - AI学院 - 知识图谱专项课 - 第8讲 - 课程笔记
  8. irsend 树莓派 php,使用树莓派(Raspberry Pi)实现智能家居(3/4)
  9. 乌班图安装nginx
  10. RFID珠宝防盗系统