python界⾯-(⼋)Python图形化界⾯设计
3.1、⽂本输⼊和输出相关控件:⽂本的输⼊与输出控件通常包括:标签(Label)、消息(Message)、输⼊框(Entry)、⽂本框(Text)。他们除了前述共同属性外,都具有⼀些特征属性和功能。
标签(Label)和 消息(Message):除了单⾏与多⾏的不同外,属性和⽤法基本⼀致,⽤于呈现⽂本信息。值得注意的是:属性text通常⽤于实例在第⼀次呈现时的固定⽂本,⽽如果需要在程序执⾏后发⽣变化,则可以使⽤下列⽅法之⼀实现:1、⽤控件实例的configure()⽅法来改变属性text的值,可使显⽰的⽂本发⽣变化;2、先定义⼀个tkinter的内部类型变量var=StringVar() 的值也可以使显⽰⽂本发⽣变化。
看下⾯的⼀个例⼦:制作⼀个电⼦时钟,⽤root的after()⽅法每隔1秒time模块以获取系统当前时间,并在标签中显⽰出来。
⽅法⼀:利⽤configure()⽅法或config()来实现⽂本变化。
import tkinter
import time
def gettime():
timestr = time.strftime("%H:%M:%S") # 获取当前的时间并转化为字符串
root.after(1000,gettime) # 每隔1s调⽤函数 gettime ⾃⾝获取时间
root = tkinter.Tk()
root.title('时钟')
lb = tkinter.Label(root,text='',fg='blue',font=("⿊体",80))
lb.pack()
gettime()
root.mainloop()
⽅法⼆:利⽤textvariable变量属性来实现⽂本变化。
import tkinter
import time
def gettime():
var.set(time.strftime("%H:%M:%S")) # 获取当前时间
root.after(1000,gettime) # 每隔1s调⽤函数 gettime ⾃⾝获取时间
root = tkinter.Tk()
root.title('时钟')
var=tkinter.StringVar()
lb = tkinter.Label(root,textvariable=var,fg='blue',font=("⿊体",80))
lb.pack()
gettime()
⽂本框(Text):
⽂本框的常⽤⽅法如下:
⽅法
功能
delete(起始位置,[,终⽌位置])
删除指定区域⽂本
get(起始位置,[,终⽌位置])
获取指定区域⽂本
insert(位置,[,字符串]...)
将⽂本插⼊到指定位置
see(位置)
在指定位置是否可见⽂本,返回布尔值
index(标记)
返回标记所在的⾏和列
mark_names()
返回所有标记名称
mark_set(标记,位置)
在指定位置设置标记
mark_unset(标记)
去除标记
上表位置的取值可为整数,浮点数或END(末尾),例如0.0表⽰第0列第0⾏
如下⼀个例⼦:每隔1秒获取⼀次当前⽇期的时间,并写⼊⽂本框中,如下:本例中调⽤ w()获取当前⽇期时间,⽤insert()⽅法每次从⽂本框txt的尾部(END)开始追加⽂本。
获取当前⽇期的时间并写⼊⽂本中
from tkinter import *
import time
import datetime
def gettime():
s=str(w())+' '
txt.insert(END,s)
root.after(1000,gettime) # 每隔1s调⽤函数 gettime ⾃⾝获取时间
root=Tk()
txt.pack()
gettime()
root.mainloop()
输⼊框(Entry):通常作为功能⽐较单⼀的接收单⾏⽂本输⼊的控件,虽然也有许多对其中⽂本进⾏操作的⽅法,但通常⽤的只有取值⽅法get()和⽤于删除⽂本的delete(起始位置,终⽌位置),例如:清空输⼊框为delete(0,END)。
3.2、按钮(Button):主要是为响应⿏标单击事件触发运⾏程序所设的,故其除控件共有属性外,属性command是最为重要的属性。通常,将按钮要触发执⾏的程序以函数形式预先定义,然后可以⽤⼀下两种⽅法调⽤函数。Button按钮的状态
有:'normal','active','disabled'
直接调⽤函数。参数表达式为"command=函数名”,注意函数名后⾯不要加括号,也不能传递参数。如下⾯的command=run1:
利⽤匿名函数调⽤函数和传递参数。参数的表达式为"command=lambda”:函数名(参数列表)。例如下⾯
的:"command=lambda:(),())"。
看下⾯的例⼦:1.从两个输⼊框去的输⼊⽂本后转为浮点数值进⾏加法运算,要求每次单击按钮产⽣的算是结果以⽂本的形式追加到⽂本框中,将原输⼊框清空。2.按钮⽅法⼀不传参数调⽤函数run1()实现,按钮"⽅法⼆”⽤lambda调⽤函数run2(x,y)同时传递参数实现。
简单加法器
from tkinter import *
def run1():
a = ())
b = ())
s = '%0.2f+%0.2f=%0.2f ' % (a, b, a + b)
txt.insert(END, s) # 追加显⽰运算结果
inp1.delete(0, END) # 清空输⼊
inp2.delete(0, END) # 清空输⼊
def run2(x, y):
a = float(x)
b = float(y)
s = '%0.2f+%0.2f=%0.2f ' % (a, b, a + b)
txt.insert(END, s) # 追加显⽰运算结果
inp1.delete(0, END) # 清空输⼊
inp2.delete(0, END) # 清空输⼊
root = Tk()
root.title('简单加法器')
lb1 = Label(root, text='请输⼊两个数,按下⾯两个按钮之⼀进⾏加法计算')
lb1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)
inp1.place(relx=0.1, rely=0.2, relwidth=0.3, relheight=0.1)
inp2 = Entry(root)
inp2.place(relx=0.6, rely=0.2, relwidth=0.3, relheight=0.1)
# ⽅法-直接调⽤ run1()
btn1 = Button(root, text='⽅法⼀', command=run1)
btn1.place(relx=0.1, rely=0.4, relwidth=0.3, relheight=0.1)
# ⽅法⼆利⽤ lambda 传参数调⽤run2()
btn2 = Button(root, text='⽅法⼆', command=lambda: (), ()))
btn2.place(relx=0.6, rely=0.4, relwidth=0.3, relheight=0.1)
# 在窗体垂直⾃上⽽下位置60%处起,布局相对窗体⾼度40%⾼的⽂本框
txt = Text(root)
txt.place(rely=0.6, relheight=0.4)
root.mainloop()
3.3、单选按钮:(Radiobutton)是为了响应故乡排斥的若⼲单选项的单击事件以触发运⾏⾃定义函数所设的,该控件排除具有共有属性外,还具有显⽰⽂本(text)、返回变量(variable)、返回值(value)、响应函数名(command)等重要属性。响应函数名"command=函数名”的⽤法与Button相同,函数名最后也要加括号。返回变量variable=var通常应预先声明变量的类型var=IntVar()或var=StringVar(),在所调⽤的函数中⽅可⽤()⽅法获取被选中实例的value值。例如下⾯:
单选按钮
from tkinter import *
def Mysel():
dic = {0:'甲',1:'⼄',2:'丙'}
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)
root.mainloop()
3.4、复选框:(Checkbutton) 是为了返回多个选项值的交互控件,通常不直接触发函数的执⾏。该控件除具有共有属性外,还具有显⽰⽂本(text)、返回变量(variable)、选中返回值(onvalue)和未选中默认返回值(offvalue)等重要属性。返回变量variable=var 通常可以预先逐项分别声明变量的类型var=IntVar() (默认)或 var=StringVar(), 在所调⽤的函数中⽅可分别调⽤ ()⽅法 取得被选中实例的 onvalue或offvalue值。复选框实例通常还可分别利⽤ select()、deselect()和 toggle() ⽅法对其进⾏选中、清除选中和反选操作。
如下的例⼦: 利⽤复选框实现,单击OK,可以将选中的结果显⽰在标签上。效果如下:
复选框的应⽤
⽅法:利⽤函数中的 if-else 分⽀实现多项显⽰
from tkinter import *
import tkinter
def run():
()==0 ()==0 ()==0 ()==0):
s = '您还没选择任何爱好项⽬'
else:
s1 = "⾜球" ()==1 else ""
s2 = "篮球" () == 1 else ""
s3 = "游泳" () == 1 else ""
s4 = "⽥径" () == 1 else ""
s = "您选择了%s %s %s %s" % (s1,s2,s3,s4)
variable used in lambda
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()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论