什么是Tkinter?
Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。
使用
导入
import tkinter
注意:Python3.x 版本使用的库名为 tkinter,即首写字母 T 为小写。
创建一个GUI程序
- 1、导入 Tkinter 模块
- 2、创建控件
- 3、指定这个控件的 master, 即这个控件属于哪一个
- 4、告诉 GM(geometry manager) 有一个控件产生了。
#!/usr/bin/python3 import tkinter top = tkinter.Tk() # 进入消息循环 top.mainloop()
窗口主体框架
每一个 tkinter 应用的主体框架都可以包含下面这部分. 定义 window 窗口 和 window的一些属性, 然后书写窗口内容, 最后执行window.mainloop让窗口活起来.
import tkinter as tk window = tk.Tk() window.title('my window') window.geometry('500x500')
#注意:这里的乘是×不是* # 这里是窗口的内容 window.mainloop()
窗口内容
Label & Button 标签和按钮
这次我们会建立一个用来描述的标签 tk.Label, 比如:
import tkinter as tk #创建窗口 window=tk.Tk() window.title('Mywindow')#窗口的标题 window.geometry('200x100')#窗口的大小 #定义一个lable l = tk.Label(window, text='Hi! this is TK!', # 标签的文字 bg='green', # 标签背景颜色 font=('Arial', 12), # 字体和字体大小 width=15, height=2 # 标签长宽(以字符长度计算) ) l.pack() # 固定窗口位置 window.mainloop()
关于Label的更多内容可以看这里https://www.runoob.com/python/python-tk-label.html
我们也可以通过变量的形式控制标签的显示, 这时我们引入按钮 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() # 按钮位置
那么点击是的命令我们用 if else 语句来判断. 用 on_hit 来判断当前状态.
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('Mywindow')#窗口的标题 window.geometry('200x100')#窗口的大小 #定义一个lable 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='点我',width=15,height=2,command=hit_me)#点击按钮执行一个名为“hit_me”的函数 b.pack() window.mainloop()
没有点击时:
点击第一次:
点击第二次:
Entry & Text 输入, 文本框
窗口主体框架
每一个tkinter应用的主体框架都包含以下几部分:
- 主窗口:
window,及主窗口的一些基本属性(标题、大小) - 让窗口活起来:
window.mainloop()
import tkinter as tk window = tk.Tk() window.title('my window') ##窗口尺寸 window.geometry('200x200') ##显示出来 window.mainloop()
窗口内容(窗口上的控件)
创建按钮分别触发两种情况
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()
创建输入框entry,用户输入任何内容都显示为*
e = tk.Entry(window,show='*') e.pack()
创建一个文本框用于显示
t = tk.Text(window,height=2)
t.pack()
定义触发事件时的函数(注意:因为Python的执行顺序是从上往下,所以函数一定要放在按钮的上面)
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('200x200') #定义一个输入框entry e=tk.Entry(window,show=None)#如果是输入密码,可以写show='*' e.pack() #定义按钮功能 def insert_point(): var=e.get() t.insert('insert',var) def insert_end(): var=e.get() t.insert('end',var)#这里还可以定义字符串插入的具体位置,比如t.insert('1.1',var),表示插入到第一行第一列
#定义2个按钮 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) b2.pack() #定义一个文本框 Text t=tk.Text(window,height=2) t.pack() ##显示出来 window.mainloop()
窗口界面
测试一下
第一次:在entry中输入tkinter,在text中输入0000并将光标定位在中间位置,点击insert point
第二次:点击insert end
Listbox 列表部件
创建主窗口
import tkinter as tk window = tk.Tk() window.title('my window') ##窗口尺寸 window.geometry('200x200') ##显示出来 window.mainloop()
创建一个label用于显示
var1 = tk.StringVar() #创建变量 l =tk.Label(window,bg='yellow',width=4,textvariable=var1) l.pack()
创建一个方法用于按钮的点击事件
def print_selection(): value = lb.get(lb.curselection()) #获取当前选中的文本 var1.set(value) #为label设置值
创建一个按钮
b1 = tk.Button(window, text='print selection', width=15, height=2, command=print_selection) b1.pack()
创建一个Listbox和变量var2,并将var2的值赋给Listbox
var2 = tk.StringVar() var2.set((11,22,33,44)) #为变量设置值 #创建Listbox lb = tk.Listbox(window, listvariable=var2) #将var2的值赋给Listbox #创建一个list并将值循环添加到Listbox控件中 list_items = [1,2,3,4] for item in list_items: lb.insert('end', item) #从最后一个位置开始加入值 lb.insert(1, 'first') #在第一个位置加入'first'字符 lb.insert(2, 'second') #在第二个位置加入'second'字符 lb.delete(2) #删除第二个位置的字符 lb.pack()
完整代码:
import tkinter as tk window = tk.Tk() window.title('my window') ##窗口尺寸 window.geometry('200x200') #创建一个lable var1 = tk.StringVar() #创建变量 l =tk.Label(window,bg='yellow',width=4,textvariable=var1) l.pack() #按钮事件 def print_selection(): value = lb.get(lb.curselection()) #获取当前选中的文本 var1.set(value) #为label设置值 #创建一个按钮 b1 = tk.Button(window, text='print selection', width=15, height=2, command=print_selection) b1.pack() #创建一个Listbox和变量var2,并将var2的值赋给Listbox var2 = tk.StringVar() var2.set((11,22,33,44)) #为变量设置值 #创建Listbox lb = tk.Listbox(window, listvariable=var2) #将var2的值赋给Listbox #创建一个list并将值循环添加到Listbox控件中 list_items = [1,2,3,4]#定义列表 for item in list_items: lb.insert('end', item) #从最后一个位置开始加入值 lb.insert(1, 'first') #在第一个位置加入'first'字符 lb.insert(2, 'second') #在第二个位置加入'second'字符 lb.delete(2) #删除第二个位置的字符 lb.pack() ##显示出来 window.mainloop()
演示
Radiobutton 选择按钮
这一次的效果将会像下面的图片一样.
如果选择了某个选项, 效果就会如下.
radiobutton 部件
首先我们需要定义一个 var 用来将 radiobutton 的值和 Label 的值联系在一起. 然后创建一个radiobutton部分:
var = tk.StringVar() l = tk.Label(window, bg='yellow', width=20, text='empty') l.pack() r1 = tk.Radiobutton(window, text='Option A', variable=var, value='A', command=print_selection) r1.pack()
其中variable=var, value='A'的意思就是,当我们鼠标选中了其中一个选项,把value的值A放到变量var中,然后赋值给variable
触发功能
我们将定义一个功能, 用来对选择的 radiobutton 进行操作. print_selection 功能就是选择了某个 radiobutton 后我们会在屏幕上打印的选项.
def print_selection(): l.config(text='you have selected ' + var.get())
当触发这个函数功能时,我们的 label 中就会显示 text 所赋值的字符串即 ‘you have selected’, 后面则是我们所选中的选项 var.get()就是获取到变量 var 的值, 举个例子就是我们一开始所做的将选项 “option A” 选中时的值以 “A” 放入 var 中, 所以获取的也就是A 即如果我们这时候选中 “option A” 选项,label显示的值则是 “you have selected A”.
完整代码:
import tkinter as tk window = tk.Tk() window.title('my window') ##窗口尺寸 window.geometry('200x200') #创建一个lable var= tk.StringVar() #创建变量 l =tk.Label(window,bg='yellow',width=20,height=2,text='empty') l.pack() #实现将选择的选项显示在lable def print_selection(): l.config(text='you have selected'+var.get()) #创建几个Radiobutton r1 = tk.Radiobutton(window, text='Option A', variable=var, value='A', command=print_selection) r1.pack() r2 = tk.Radiobutton(window, text='Option B', variable=var, value='B', command=print_selection) r2.pack() r3 = tk.Radiobutton(window, text='Option C', variable=var, value='C', command=print_selection) r3.pack() ##显示出来 window.mainloop()
演示: