使用tkinter开发GUI程序4 -- tkinter常见控件的特征属性(第二部分)
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常见控件的特征属性(第二部分)相关推荐
- python怎么开发gui程序_第一个GUI程序
Python GUI 开发有好几个第三方的库,我选择的是tkinter 最简单的一个GUI程序 import tkinter as tk//给库来个简写,用的时候简洁一点 root = tk.Tk() ...
- 用Java开发桌面应用程序(Swing开发GUI程序)
前面学过了面向对象基本概念.面向对象基本特征.Java基本包和API:异常.多线程.IO等. 基本概念 Swing:java中的一个包,负责开发GUI程序 GUI:图形用户界面,一般指可视化桌面系统中 ...
- Windows10下VB6.0开发——常见控件使用整理
前言:以下整理了一些常见控件的使用,关于串口通信的控件的使用,在之前文章介绍过. 1. 单选按钮 -- OptionButton 有很多场景中会需要用到单选按钮,使用单选按钮的基本原则是:在同一个 ...
- VS2010下ocx开发:(2)在C#程序中调用ocx控件
在本文中,给出一个C#示例程序,调用上一篇博文中创建的MultiplyDemo.ocx控件.注意需要保证该控件已经注册过. 启动Visual Studio 2010,使用C#创建一个Windows窗体 ...
- android控件使用大全,Android常见控件使用详解
本文实例为大家分享了六种Android常见控件的使用方法,供大家参考,具体内容如下 1.TextView 主要用于界面上显示一段文本信息 2.Button 用于和用户交互的一个按钮控件 //为Butt ...
- [Android Studio]掌握Android Studio的五种常见控件和五种常见布局
目录 一.View和ViewGroup 二.Android的五种常见控件 2.1 文本控件 2.1.1 TextView 2.1.2 EditText 2.2 按钮控件 2.2.1 Button 2. ...
- iOS 9应用开发教程之使用开关滑块控件以及滚动部署视图
iOS 9应用开发教程之使用开关滑块控件以及滚动部署视图 使用ios9中的开关.滑块控件 开关和滑块也是用于和用户进行交互的控件.本节将主要讲解这两种控件. ios9开关 开关控件常用来控制某个功能的 ...
- 微信小程序wepy自定义card控件封装
微信小程序wepy自定义card控件 在利用wepy开发小程序的过程中,需要使用自定义控件来实现,但是很多时候,若直接在page页面中写对应的控件,下次在另一个页面中,想使用同样的控件又需要重新绑定数 ...
- 软件测试多次点击按钮叫什么方法,常见控件的测试点 - 爱昵容儿 的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
视频:软件测试--常见控件测试之一 源文档 > 视频:软件测试--常见控件测试之三 源文档 常见控件的测试和常见功能点击系统权限 常见控件的名称和测试方法 文本框:用文字工具划出画出来的,用来编 ...
最新文章
- 刚刚,2021中国最好学科排名发布:北大、清华、人大中国顶尖学科居前三
- 中西三大差距根源在哪里?
- js怎么获取访问页数记录(知道的能不能告诉我一下)
- SAP后台作业记录操作
- 网站刷关键词_中小企业网站排名如何做SEO优化 - 刷百度关键词排名
- centos 日志审计_Linux\CentOS中auditd安全审计工具的使用
- JMeter打开jmx文件出错CannotResolveClassException: org.apache.jmeter.protocol.ssh.sampler.SSHCommandSampler
- matlab中的lower,请问:MATLAB中,有实现Gabor变换的函数吗?
- mysql数据库开发要求_MYSQL数据库开发规范
- 【kafka】Replication factor: 1 larger than available brokers:0
- BZOJ1195[HNOI2006]最短母串——AC自动机+BFS+状态压缩
- mongodb创建集合命令db.createCollection详解
- editplus 格式java_用Editplus开发Java
- shopex 小知识
- 2021年遥感类SCI期刊JCR分区/中科院分区排名与影响因子汇总
- 通过串口波特率计算数据传输速率(每秒字节数)
- 微信小程序商城API文档
- android内窥镜安装软件,DEPSTECH内窥镜app
- 世界银行公布各国1996-2018年GDP及GDP增长率
- Java 基础系列(七) --- 透彻学习Java的接口