什么是 tkinter 窗口
1.1 什么是 Tkinter
Python自带的可编辑的GUI界面,是一个图像窗口。
Tkinter是使用 python 进行窗口视窗设计的模块。简单的构造,多平台,多系统的兼容性, 能让它成为让你快速入门定制窗口文件的好助手。它在 python 窗口视窗模块中是一款简单型的。所以用来入门,熟悉窗口视窗的使用,非常有必要。
tkinter 的窗口部件
2.1 Label & Button 标签和按钮
窗口主体框架
每一个tkinter应用的主体框架都可以包含下面这部分,定义window窗口和window的一些属性,然后书写窗口内容,最后执行window.mainloop让窗口活起来。
importtkinter astk
window =tk.Tk()
window.title('my window')
window.geometry('300x100')
# 这里是窗口的内容
window.mainloop()
首先建立一个用来描述的标签tk.Label(注意对象的首字母一般是大写),示例代码如下所示:
l =tk.Label(window,
text='OMG! this is TK!',# 标签的文字
bg='green',# 背景颜色
font=('Arial',12),# 字体和字体大小
width=15,height=2)# 标签长宽
l.pack()# 固定窗口位置
运行结果如图所示:
我们也可以通过变量的形式控制标签的显示,这时我们引入按钮 tk.Button 的概念,每点一次按钮,标签变化一次。 用以下内容替换上面的标签. 并把需要变化的文字存成变量 var:
var=tk.StringVar()# 这时文字变量储存器
l =tk.Label(window,
textvariable=var,# 使用 textvariable 替换 text, 因为这个可以变化
bg='green',font=('Arial',12),width=15,height=2)
l.pack()
接着做按钮tk.Button:
b =tk.Button(window,
text='hit me',# 显示在按钮上的文字
width=15,height=2,
command=hit_me)# 点击按钮式执行的命令
b.pack()# 按钮位置
hit_me函数如下:
on_hit =False# 默认初始状态为 Falsedef hit_me():
globalon_hit
ifon_hit ==False:# 从 False 状态变成 True 状态
on_hit =True
var.set('you hit me')# 设置标签的文字为 'you hit me'
else:# 从 True 状态变成 False 状态
on_hit =False
var.set('')# 设置文字为空
运行结果如下所示:
没有点击动作时:
点击第一次:
点击第二次:
完整代码:
importtkinter astk
window=tk.Tk()
window.title('my window')
window.geometry('300x100')
var=tk.StringVar()
l=tk.Label(window,textvariable=var,bg='green',font=('Arial',12),width=15,
height=2)
l.pack()
on_hit=False
defhit_me():
globalon_hit
ifon_hit==False:
on_hit=True
var.set('you hit me')
else:
on_hit=False
var.set('')
b=tk.Button(window,text='hit me',width=15,
height=2,command=hit_me)
b.pack()
window.mainloop()
2.2 Entry & Text 输入, 文本框
在定义了窗口的基础上,首先定义一个Entry,代码如下所示:
e =tk.Entry(window,show=None)
e.pack()
注意这里的show,可以自定义显示你想要在Entry中显示的字符,例如像输入密码时,可令show=‘*’
本节实现的例子功能为,如下所示的一个窗口,从上至下分别为定义的Entry、Button、Button和Text。两个Button分别命名为insert point和insert end,获取Entry中输入的内容并且分别在光标位置、末尾插入,内容显示在Text中。
Button的定义如下所示:
b1 =tk.Button(window,text='insert point',width=15,
height=2,command=insert_point)
b1.pack()
b2 =tk.Button(window,text='insert end',
command=insert_end)
函数的定义如下所示:
definsert_point():
var=e.get()
t.insert('insert',var)
definsert_end():
var=e.get()
t.insert('end',var)
完整代码如下:
importtkinter astk
window =tk.Tk()
window.title('my window')
window.geometry('300x300')
e =tk.Entry(window,show=None)
e.pack()
definsert_point():
var=e.get()
t.insert('insert',var)
definsert_end():
var=e.get()
t.insert('end',var)
b1 =tk.Button(window,text='insert point',width=15,
height=2,command=insert_point)
b1.pack()
b2 =tk.Button(window,text='insert end',
command=insert_end)
b2.pack()
t =tk.Text(window,height=2)
t.pack()
window.mainloop()
运行结果如下所示,首先在Entry中输入111111,点击按钮1,如下:
选择某一点作为插入位置,再在Entry中输入2,点击按钮1
在Entry中输入3,点击按钮2
此外,insert还能实现具体位置的内容插入,例如将inser_end函数更改如下:
definsert_end():
var=e.get()
t.insert(2.2,var)
则insert_end实现在Text的2行2列出插入内容,运行结果如下所示:
2.3 Listbox 列表部件
本节例子实现功能为:如下所示,从上到下分别为Label、Button和Listbox,Button实现将Listbox中当前光标选中的内容显示在Label中。
在定义好窗口的基础上首先定义Label,设置底色为黄色,并且要将文本内容定义为变量,代码如下:
var1=tk.StringVar()
l=tk.Label(window,bg='yellow',width=4,textvariable=var1)
l.pack()
接着定义Button,命名为‘print selection’,并定义command的函数,如下所示:
defprint_selection():
value=lb.get(lb.curselection())
var1.set(value)
b1 =tk.Button(window,text='print selection',width=15,
height=2,command=print_selection)
b1.pack()
最后定义Listbox,如下所示实现了Listbox中内容