欢迎各位兄弟 发布技术文章
这里的技术是共享的
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()
这次我们会建立一个用来描述的标签 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()
没有点击时:
点击第一次:
点击第二次:
每一个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
import tkinter as tk window = tk.Tk() window.title('my window') ##窗口尺寸 window.geometry('200x200') ##显示出来 window.mainloop()
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()
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()
演示
这一次的效果将会像下面的图片一样.
如果选择了某个选项, 效果就会如下.
首先我们需要定义一个 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()
演示: