【Python强化】tkinter使用教程

一、Tkinter介绍

Tkinter 是 Python 标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成。

相关的还有Pyqt5

二、使用方式

  • 导入tkinter模块
  • 创建相关控件
  • 指定控件所属对象
  • 告诉GM产生相关对象
import tkinter
top = tkinter.Tk()
top.mainloop()

效果图



三、窗口主体设置

每一个 tkinter 应用的主体框架都可以包含下面这部分. 定义 window 窗口 和 window 的一些属性, 然后书写窗口内容, 最后执行 window.mainloop 启动应用程序。

import tkinter
top = tkinter.Tk()
top.title("my first window")
top.geometry("500x500")
top.mainloop()



四、窗口内容

标签设置

window = tkinter.Tk()
window.title("my first window")
window.geometry("500x500")
#定义一个标签
label = tkinter.Label(window,
                      text="hello world!!!", #文本内容
                      bg="red", #背景颜色
                      font=('Arial',12),# 字体设置
                      width=15,height=2 # 标签的长宽
label.pack()   #固定窗口位置
window.mainloop()



我们也可以通过变量的形式控制标签的显示, 这时我们引入按钮 tk.Button 的概念, 没点一次按钮, 标签变化一次. 用一下内容替换上面的标签. 并把需要变化的文字存成变量 var :

window = tkinter.Tk()
window.title("my first window")
window.geometry("500x500")
# 定义文字变量存储器
var = tkinter.StringVar()
lable = tkinter.Label(window,
                      textvariable=var, #textvariable替代text,因为这个可以进行随机改变
                      bg='green', font=('Arial', 12), width=15, height=2)
lable.pack()
window.mainloop()

按钮设置:

button = tkinter.Button(window, 
    text='hit me',      # 显示在按钮上的文字
    width=15, height=2, 
    command=hit_me)     # 点击按钮式执行的命令
button.pack()    # 按钮位置

我们进行点击判断:

on = False  # 默认初始状态为 False
def hit_me():
    global on
    if on == False:     # 从 False 状态变成 True 状态
        on = True
        var.set('you click me')   # 设置标签的文字为 'you hit me'
    else:       # 从 True 状态变成 False 状态
        on = False
        var.set('') # 设置 文字为空

新增一个按钮,按钮实战,绑定点击事件

import tkinter as tk
#创建窗口
window=tk.Tk()
window.title('Mywindow')#窗口的标题
window.geometry('200x100')#窗口的大小
#定义一个lable
var=tk.StringVar()#定义一个字符串变量
label = tk.Label(window,
    textvariable=var,    # 标签的文字
    bg='green',     # 标签背景颜色
    font=('Arial', 12),     # 字体和字体大小
    width=15, height=2  # 标签长宽
label.pack()    # 固定窗口位置
#定义一个全局变量,
flag=False
#按钮的函数
def click_me():
    global flag#声明全局变量
    if flag==False:
        flag=True
        var.set('click me!')
    else:
        flag=False
        var.set('null')
button = tkinter.Button(window,text="点我",
                        width=15,
                        height=2,
                        command=click_me)# 绑定执行方法
button.pack()
window.mainloop()



文本框

窗口内容

创建按钮分别触发两种情况

b1 = tk.Button(window,text="one",width=15,height=2,command=one)
b1.pack()
b2 = tk.Button(window,text="two",command=two)
b2.pack()

创建输入框entry,用户输入任何内容都显示为* 类似于html中的password

#encoding=utf-8
import tkinter as tk
window = tk.Tk()
window.title("我的第一个")
window.geometry("500x500")
en = tk.Entry(window,show="*")
en.pack()
window.mainloop()



创建一个显示的文本框

import tkinter as tk
window = tk.Tk()
window.title("我的第一个")
window.geometry("500x500")
en = tk.Text(window,height=5)
en.pack()
window.mainloop()



定义触发事件时的函数

注意:因为Python的执行顺序是从上往下,所以函数一定要放在按钮的上面

def one():
    var = en.get()
    t.insert('one',var)
def two():
    var = en.get()
    t.insert('two',var)

实战代码:

import tkinter as tk
window = tk.Tk()
window.title("我的第一个")
#定义窗口尺寸大小
window.geometry("500x500")
# 定义一个输入框  如果我们需要定义的是输入的密码,我们此时可以定义为show="*"
en = tk.Entry(window,show=None)
en.pack()
#这里还可以定义字符串插入的具体位置,比如tk.insert('2.2',var),表示插入到第2行第2列
def one():
    var = en.get()
    text.insert('insert',str(var))
def two():
    var = en.get()
    text.insert('end',str(var))
# 定义两个执行函数的按钮
one_bt = tk.Button(window,text="one",width = 15,height =2,command=one)
one_bt.pack()
two_bt = tk.Button(window,text="two",width = 15,height =2,command=two)
two_bt.pack()
text = tk.Text(window,height=2)
text.pack()
window.mainloop()



listbox 列表部件

创建一个label用于显示

var = tk.StringVar()   
label =tk.Label(window,bg='yellow',width=4,textvariable=var1)
label.pack()

创建一个用于点击的事件

def print_selection():
    value = lb.get(lb.curselection())   #获取当前选中的文本
    var1.set(value)     #为label设置值

创建一个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("listbox")
window.geometry("500x500")
#创建一个label
var1 = tk.StringVar()
label = tk.Label(window,bg="red",width=4,textvariable=var1)
label.pack()
#按钮事件
def print_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和变量var2,并将var2的值赋给listbox
var2 = tk.StringVar()
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选择按钮

首先我们需要定义一个 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”.

代码实战:

#encoding=utf-8
import tkinter as tk
window = tk.Tk()
window.title("我的第一个")
#定义窗口尺寸大小 必须是X 而不是*
window.geometry("500x500")
#创建一个label
var = tk.StringVar()
label = tk.Label(window,bg="red",width=20,height=2,text="empty")
label.pack()
#实现将选择的选项显示label
def print_selection():
    label.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)