本节介绍Variable类、compound属性、文本输入框组件,文本框与滚动条组件关联绑定等!
Variable类
再说下面的GUI组件之前,先了解一些Variable类相关用法
Tkinter的Variable类用于跟GUI组件双向绑定,所谓双向绑定:
- 当程序改变变量值,GUI 组件的显示内容会随之改变
- 当 GUI 组件的内容发生改变时(比如用户输入),变量的值也会随之改变
实现Tkinter组件与变量双向绑定,只要为组件属性variable/textvariable/onvalue/offvalue/value绑定Variable类值即可
Variable 类数据类型有:
- StringVar():封装一个str变量
- IntVar():封装一个整型值变量
- DoubleVar():封装一个浮点值变量
- BooleanVar():封装一个bool值变量
Variable类方法:
- 设置Variable值,用set方法,即:x.set()
- 得到Variable值,用get方法,即:x.get()
下面程序示范了将 Entry 组件与 StringVar 进行双向绑定,这样程序既可通过该 StringVar 改变 Entry 输入框显示的内容,也可通过该 StringVar 获取 Entry 输入框中的内容:
# -*- coding:utf-8 -*-from tkinter import messagebox,StringVar,BOTH,YES,LEFT,Frame,Tkclass App(object): def __init__(self, mw): self.mw = mw self.initWidgets() def initWidgets(self): self.st = StringVar() # 创建文本输入框,将其textvariable绑定到self.st变量 ttk.Entry(self.mw, textvariable=self.st, width=24,font=('arial', 20, 'bold'), foreground='red').pack(fill=BOTH, expand=YES) # 创建Frame作为容器 f = Frame(self.mw) f.pack() ttk.Button(f, text='获取', command=self.get).pack(side=LEFT) def get(self): messagebox.showinfo(, message=self.st.get() )if __name__ == "__main__": mw = Tk() mw.title("Variable类使用") App(mw) mw.mainloop()
运行程序,在文本框输入内容,然后单击获取按钮,弹出对话框,显示输入内容
compound属性
该属性用于设置组件内部文本和图像的混合模式 如Label、Text等组件同时设置 text 和 image 两个属性,其中 text 是组件显示文本,image是组件显示图片当两个属性,同时设定默认通常 image 会覆盖 text;但有些时候,希望同时显示文木和图片,这时就用到 compound 属性了
compound属性取值有:
- None 图片覆盖文字
- LEFT 图片在左,文本在右
- RIGHT 图片在右,文本在左
- TOP 图片在上,文本在下
- BOTTOM 图片在底,文本在上
- CENTER 文本在图片上方
compound属性使用示例:
# -*- coding:utf-8 -*-from tkinter import ttk,PhotoImage,Tk,BOTH,YES,StringVar,Radiobutton,LEFT,CENTERimport osprint(os.getcwd())class App(object): def __init__(self, mw): self.mw = mw self.initWidgets() def initWidgets(self): self.bm = PhotoImage(file = 'image/logo.png') # 创建一个Label,同时指定text和image self.label = ttk.Label(self.mw, text='雷那网 一个Python兴趣屋!',image=self.bm, font=('arial', 20, 'bold'), foreground='red') # Label的compound选型设为None,图片覆盖文字 self.label['compound'] = None self.label.pack() # 创建Frame容器,装载多个Radiobutton f = ttk.Frame(self.mw) f.pack(fill=BOTH, expand=YES) compounds = ('None', "LEFT