Python GUI tkinter examples教程

Table of Contents

Python GUI tkinter 简单又强大

建立第一个GUI程序

  • 第一个GUI
from tkinter import *
 
win = Tk()

win.title("Welcome to ROBOTKOKO.com")

win.mainloop()

gui-tkinter-001.png

建立一个Label标签

from tkinter import *
 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")

#设置标签和标签内容在窗体上
lbl = Label(win,text="ROBOTKOKO.COM")

#把标签定位在窗体上第一排第一列
lbl.grid(column=0, row=0)
 
win.mainloop()

gui-tkinter-label-001.png

设置标签字体大小

  • 除了LABEL,其余组件也能设置字体
#可以设置标签字体及大小
#注意:需要放在label.grid语句前面,放后面无效果
lbl = Label(win, text="ROBOTKOKO.COM", font=("Courier",50))
from tkinter import *

 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")

#设置标签和标签内容在窗体上
lbl = Label(win,text="ROBOTKOKO.COM")

#可以设置标签字体及大小
#注意:需要放在label.grid语句前面,放后面无效果
lbl = Label(win, text="ROBOTKOKO.COM", font=("Courier",50))

#把标签定位在窗体上第一排第一列
lbl.grid(column=0, row=0) 

win.mainloop()

gui-tkinter-label-002-font.png

设置窗体大小

  • 窗体的大小可以通过设置geometry设置
#设置窗体大小
win.geometry('600x200')

#设置窗体大小 600x200 和 位置(50,50)
win.geometry('600x200+50+50')
from tkinter import *

 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")

#设置窗体大小
win.geometry('600x200')

#设置窗口大小,用geometry
win.geometry('600x200')

#设置标签和标签内容在窗体上
lbl = Label(win,text="ROBOTKOKO.COM")

#可以设置标签字体及大小
lbl = Label(win, text="ROBOTKOKO.COM", font=("Courier",50))

#把标签定位在窗体上第一排第一列
lbl.grid(column=0, row=0) 


win.mainloop()

gui-tkinter-label-003-win-size.png

增加一个按钮组件BUTTON

  • 添加按钮和标签一样
btn = Button(win, text="...敲 我...")

#排在第二列,第一行,如果还是放在第一列,第一行,那将在标签上面
btn.grid(column=1,row=0)
from tkinter import *

 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")

#设置窗口大小,用geometry
win.geometry('600x200')

#设置标签和标签内容在窗体上
lbl = Label(win,text="ROBOTKOKO.COM")

#可以设置标签字体及大小
lbl = Label(win, text="ROBOTKOKO.COM", font=("Courier",50))

#把标签定位在窗体上第一排第一列
lbl.grid(column=0, row=0) 

#增加按钮
btn = Button(win, text="...敲 我...")

#排在标签右边,相当于第二列,第一行
btn.grid(column=1, row=0)

win.mainloop()

gui-tkinter-button-001.png

改变按钮前景色和背景色

  • 可以用fg,bg改变任意组件的前景和背景色
btn = Button(win, text="...敲 我...", bg="blue", fg="red")
from tkinter import *

 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")

#设置窗口大小,用geometry
win.geometry('600x200')

#设置标签和标签内容在窗体上
lbl = Label(win,text="ROBOTKOKO.COM")

#可以设置标签字体及大小
lbl = Label(win, text="ROBOTKOKO.COM", font=("Courier",50))

#把标签定位在窗体上第一排第一列
lbl.grid(column=0, row=0) 

#增加按钮
#btn = Button(win, text="...敲 我...")
btn = Button(win, text="...敲 我...", bg="blue", fg="red")

#排在标签右边,相当于第二列,第一行
btn.grid(column=1, row=0)

win.mainloop()

gui-tkinter-button-002.png

处理按钮点击事件

当点击按钮的时候,按钮应该有反馈的动作

#定义函数
def clicked():
    #当按钮点击时,标签lbl显示text内容
    lbl.configure(text="Button was clicked !!")

#通过command传给btn,clicked事件
btn = Button(win, text=“...敲 我...”, command=clicked)
from tkinter import *

 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")

#设置窗口大小,用geometry
win.geometry('600x200')

#设置标签和标签内容在窗体上
lbl = Label(win,text="ROBOTKOKO.COM")

#可以设置标签字体及大小
#lbl = Label(win, text="ROBOTKOKO.COM", font=("Courier",50))
lbl = Label(win, font=("Courier",50))

#把标签定位在窗体上第一排第一列
lbl.grid(column=0, row=0) 

#定义函数
def clicked():
    lbl.configure(text="按钮被敲了!")

#增加按钮及事件
#btn = Button(win, text="...敲 我...")
#btn = Button(win, text="...敲 我...", bg="blue", fg="red")
btn = Button(win, text="...敲 我...", bg="blue", fg="red", command=clicked)

#排在标签右边,相当于第二列,第一行
btn.grid(column=1, row=0)

win.mainloop()

gui-tkinter-button-003-no-click.png gui-tkinter-button-004-clicked.png

文本输入框TEXTBOX

  • 文本框Textbox用来接收输入信息Entry
#输入信息,固定显示文本框宽度10,实际输入可以超过10位
txt = Entry(win,width=10)
from tkinter import *

 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")

#设置窗口大小,用geometry
win.geometry('600x200')

#设置标签和标签内容在窗体上
lbl = Label(win,text="ROBOTKOKO.COM")

#可以设置标签字体及大小
#lbl = Label(win, text="ROBOTKOKO.COM", font=("Courier",50))
lbl = Label(win, font=("Courier",50))

#把标签定位在窗体上第一排第一列
lbl.grid(column=0, row=0) 

#文本框输入
txt = Entry(win,width=10)
txt.grid(column=1, row=0)

#定义函数
def clicked():
    lbl.configure(text="按钮被敲了!")

#增加按钮
#btn = Button(win, text="...敲 我...")
#btn = Button(win, text="...敲 我...", bg="blue", fg="red")
btn = Button(win, text="...敲 我...", bg="blue", fg="red", command=clicked)

#排在标签右边,相当于第二列,第一行
#btn.grid(column=1, row=0)
#排到文本框右边了,变第三列
btn.grid(column=2, row=0)

win.mainloop()

gui-tkinter-textbox-001.png gui-tkinter-textbox-002.png

  • 输入文本后,并没有其他变化,这时候可以将输入加入事件来显示
#加入变量,以便让输入有所作为
def clicked():
    shuru = "欢迎~ " + txt.get()
    lbl.configure(text= shuru)
from tkinter import *

 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")

#设置窗口大小,用geometry
win.geometry('600x200')

#设置标签和标签内容在窗体上
lbl = Label(win,text="ROBOTKOKO.COM")

#可以设置标签字体及大小
#lbl = Label(win, text="ROBOTKOKO.COM", font=("Courier",50))
lbl = Label(win, font=("Courier",40))

#把标签定位在窗体上第一排第一列
lbl.grid(column=0, row=0) 

#文本框输入
txt = Entry(win,width=10)
txt.grid(column=1, row=0)

#定义函数,得到输入的内容并显示
def clicked():
    shuru = "欢迎~" + txt.get()
    lbl.configure(text=shuru)

#增加按钮
#btn = Button(win, text="...敲 我...")
#btn = Button(win, text="...敲 我...", bg="blue", fg="red")
btn = Button(win, text="...敲 我...", bg="blue", fg="red", command=clicked)

#排在标签右边,相当于第二列,第一行
#btn.grid(column=1, row=0)
#排到文本框右边了,变第三列
btn.grid(column=2, row=0)

win.mainloop()

gui-tkinter-textbox-003.png gui-tkinter-textbox-004.png

设置焦点

  • 光标默认焦点,方便输入数据
txt.focus()

禁止输入

txt = Entry(win, width=10, state='disabled')

增加组合框COMBOBOX

  • 可以从ttk库导入
from tkinter.tkk import *

combo = Combobox(win)
from tkinter import *
 
from tkinter.ttk import *
 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.COM")
 
window.geometry('400x200')
 
combo = Combobox(win)
 
combo['values']= (1, 2, 3, 4, 5, "ROBOT")

#设置默认选中的选项 2
combo.current(1)
 
combo.grid(column=0, row=0)
 
win.mainloop()

gui-tkinter-combobox-001.png

  • 要取得选中项,可以用
combo.get()

增加复选框CHECKBUTTON

chk = Checkbutton(win, text="Choose")
  • 可以这样设置默认选中项
from tkinter import *
 
from tkinter.ttk import *
 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.COM")
 
win.geometry('400x200')
 
chk_state = BooleanVar()
 
#设置默认选中状态
chk_state.set(True)
 
chk = Checkbutton(win, text='Choose', var=chk_state)
 
chk.grid(column=1, row=0)
 
win.mainloop()

gui-tkinter-checkbutton-001.png

设置复选框的选中状态

  • 可以用BooleanVar设置,也可以用IntVar()设置
chk_state = IntVar()

#未选中 
chk_state.set(0)

#选中
chk_state.set(1) 

增加单选按钮RADIOBUTTON

rad1 = Radiobutton(win, text="ROBOT", value=1)
  • 必须要为每个单选按钮,设定一个不同的值
from tkinter import *
 
from tkinter.ttk import *
 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")
 
win.geometry('400x200')
 
rad1 = Radiobutton(win,text='ROBOT-1', value=1)
 
rad2 = Radiobutton(win,text='ROBOT-2', value=2)
 
rad3 = Radiobutton(win,text='ROBOT-3', value=3)
 
rad1.grid(column=0, row=0)
 
rad2.grid(column=1, row=0)
 
rad3.grid(column=2, row=0)
 
win.mainloop()

gui-tkinter-radiobutton-001.png

  • 可以给不同的按钮设置不同的事件功能
rad1 = Radiobutton(win,text='ROBOT-1', value=1, command=clicked)
 
def clicked():
   #设置不同的功能
   pass

得到被选中的单选按钮的值

from tkinter import *
 
from tkinter.ttk import *
 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")
win.geometry('400x200')
 
selected = IntVar()

lbl = Label(win, font=("Arial Bold",30))
 
rad1 = Radiobutton(win,text='ROBOT-1', value=1, variable=selected)
 
rad2 = Radiobutton(win,text='ROBOT-2', value=2, variable=selected)
 
rad3 = Radiobutton(win,text='ROBOT-3', value=3, variable=selected)
 
 
rad1.grid(column=0, row=0)
 
rad2.grid(column=1, row=0)
 
rad3.grid(column=2, row=0)



def clicked():
 
   lbl.configure(text=selected.get())
 
btn = Button(win, text="...敲 我...", command=clicked)
 
btn.grid(column=3, row=0)

lbl.grid(column=0, row=1)

 
win.mainloop()

gui-tkinter-radiobutton-002.png

增加文本框SCROLLEDTEXT

from tkinter import scrolledtext
 
txt = scrolledtext.ScrolledText(win,width=40,height=10)

from tkinter import *
 
from tkinter import scrolledtext
 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")
 
win.geometry('400x200')
 
txt = scrolledtext.ScrolledText(win,width=40,height=10)
 
txt.grid(column=0,row=0)
 
win.mainloop()

gui-tkinter-scrolledtext-001.png

插入内容到SCROLLEDTEXT

txt.insert(INSERT,'可以敲入内容到这里,使用变量也可以')

删除SCROLLEDTEXT内容

txt.delete(1.0,END)

建立消息框MESSAGEBOX

from tkinter import messagebox
 
messagebox.showinfo('标题','消息内容')

gui-tkinter-messagebox-001.png

from tkinter import *
 
from tkinter import messagebox
 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")
 
win.geometry('400x200')
 
def clicked():
 
    messagebox.showinfo('标题', '消息内容')
 
btn = Button(win,text='...敲 我...', command=clicked)
 
btn.grid(column=0,row=0)
 
win.mainloop()

gui-tkinter-messagebox-002.png

显示警告和错误消息框

#显示警告框
messagebox.showwarning('标题', '警告信息')  

#显示错误框 
messagebox.showerror('标题', '错误信息')    

显示询问消息框

from tkinter import messagebox
 
res = messagebox.askquestion('标题','消息内容')
 
res = messagebox.askyesno('标题','消息内容')
 
res = messagebox.askyesnocancel('标题','消息内容')
 
res = messagebox.askokcancel('标题','消息内容')
 
res = messagebox.askretrycancel('标题','消息内容')

  • 如果点击OK,YES或RETRY,会返回True; NO或CANCEL,会返回False;askyesnocancel会返回True,False或None

增加一个微调框SPINBOX

spin = Spinbox(win, from_=0, to=100, width=5)

gui-tkinter-spinbox-001.png

  • 也可以用以下方便,选择特定的值,而不是范围
spin = Spinbox(win, values=(3,6,9), width=5)

设置微调框默认值SPINBOX

var =IntVar()

#默认值15 
var.set(15)
 
spin = Spinbox(win, from_=0, to=100, width=5, textvariable=var)

增加一个进度条PROGRESSBAR

from tkinter.ttk import Progressbar
 
bar = Progressbar(win, length=200)

  • 可以设置进度条值
bar['value']=15

改变进度条PROGRESSBAR颜色

from tkinter import *
 
from tkinter.ttk import Progressbar
 
from tkinter import ttk
 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")
 
win.geometry('400x200')
 
style = ttk.Style()
 
style.theme_use('default')
 
style.configure("black.Horizontal.TProgressbar", background='red')
 
bar = Progressbar(win, length=200, style='black.Horizontal.TProgressbar')
 
bar['value'] = 15
 
bar.grid(column=0, row=0)
 
win.mainloop()

gui-tkinter-progressbar-001.png

增加文件对话框FILEDIALOG

from tkinter import filedialog

#单个文件 
file = filedialog.askopenfilename()

#多个文件
files = filedialog.askopenfilenames()

过滤文件后缀名

file = filedialog.askopenfilename(filetypes = (("文本文件","*.txt"),("all files","*.*")))
  • 打开文件夹
dir = filedialog.askdirectory()
  • 也可以指定初始的文件夹
from os import path

#指定文件夹位置路径 
file = filedialog.askopenfilename(initialdir= path.dirname(__file__))

增加菜单条

from tkinter import *
from tkinter import Menu

win = Tk()

win.title("Welcome to ROBOTKOKO.com")

win.geometry('400x200')

#加入菜单条
menu = Menu(win)
 
#加入菜单命令
menu.add_command(label='文件')
 
win.config(menu=menu)
 
win.mainloop()

gui-tkinter-menubar-001.png

  • 添加菜单项
menu.add_cascade(label='文件', menu=new_item)

gui-tkinter-menubar-002.png

  • 用这个方法可以添加很多菜单项包括分割线
from tkinter import *
from tkinter import Menu

win = Tk()

win.title("Welcome to ROBOTKOKO.com")

win.geometry('400x200')

menu = Menu(win)

new_item = Menu(menu)

new_item.add_command(label="新建")

#分割线
new_item.add_separator()

#新的菜单项“编辑”
new_item.add_command(label="编辑")

menu.add_cascade(label="文件", menu=new_item)
 
#menu.add_command(label='文件')
 
win.config(menu=menu)
 
win.mainloop()

gui-tkinter-menubar-003.png

  • 如果你单击“文件”和“新建”之间的那条虚线,会跳出一个小的窗口只有菜单

gui-tkinter-menubar-004.png

  • 可以用tearoff=0来去掉
new_item = Menu(menu, tearoff=0)
  • 给菜单添加命令事件
#命令事件clicked
new_item.add_command(label='新建', command=clicked)

增加书签控件NOTEBOOK

  • 首先,建立一个书签控制器
  • 其次,用框架建立书签,把标签加到书签控制器上
  • 再次,把书签放在窗口上
from tkinter import *
 
from tkinter import ttk
 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")

win.geometry('400x200')
 
tab_control = ttk.Notebook(win)
 
tab1 = ttk.Frame(tab_control)
 
tab_control.add(tab1, text='第一个书签')
 
tab_control.pack(expand=1, fill='both')
 
win.mainloop()

gui-tkinter-notebook-001.png

  • 用这种方法可以添加很多书签
from tkinter import *
 
from tkinter import ttk
 
win = Tk()
 
win.title("Welcome to ROBOTKOKO.com")

win.geometry('400x200')
 
tab_control = ttk.Notebook(win)
 
tab1 = ttk.Frame(tab_control)

tab2 = ttk.Frame(tab_control)
 
tab_control.add(tab1, text='第一个书签')

tab_control.add(tab2, text='第二个书签')

lab1 = Label(tab1, text='第一个标签')

lab1.grid(column=0, row=0)

lbl2 = Label(tab2, text='第二个标签')

lbl2.grid(column=0, row=0)
 
tab_control.pack(expand=1, fill='both')
 
win.mainloop()

把不同组件加入书签NOTEBOOK中

gui-tkinter-notebook-002.png

增加组件间空间PADDING

  • 在任何组件间加入padx,pady
lbl1 = Label(tab1, text= '标签1', padx=5, pady=5)

gui-tkinter-padding-001.png

Home Blog Shop Contact About