此篇文章是跟着沫凡小哥的视频学习的,附上学习网址:https://morvanzhou.github.io/tutorials/python-basic/
什么是 tkinter 窗口
1.1 什么是 Tkinter
Python自带的可编辑的GUI界面,是一个图像窗口。
Tkinter是使用 python 进行窗口视窗设计的模块。简单的构造,多平台,多系统的兼容性, 能让它成为让你快速入门定制窗口文件的好助手。它在 python 窗口视窗模块中是一款简单型的。所以用来入门,熟悉窗口视窗的使用,非常有必要。
tkinter 的窗口部件
2.1 Label & Button 标签和按钮
窗口主体框架
每一个tkinter应用的主体框架都可以包含下面这部分,定义window窗口和window的一些属性,然后书写窗口内容,最后执行window.mainloop让窗口活起来。
import tkinter as tk
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 #默认初始状态为 False
def hit_me():
global on_hit
if on_hit == False: #从 False 状态变成 True 状态
on_hit = True
var.set('you hit me') #设置标签的文字为 'you hit me'
else: #从 True 状态变成 False 状态
on_hit = False
var.set('') #设置文字为空
运行结果如下所示:
没有点击动作时:
点击第一次:
点击第二次:
完整代码:
import tkinter as tk
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
def hit_me():
global on_hit
if on_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)
函数的定义如下所示:
def insert_point():
var = e.get()
t.insert('insert',var)
def insert_end():
var = e.get()
t.insert('end',var)
完整代码如下:
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('300x300')
e = tk.Entry(window,show=None)
e.pack()
def insert_point():
var = e.get()
t.insert('insert',var)
def insert_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函数更改如下:
def insert_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()