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()
建立一个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()
设置标签字体大小
- 除了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()
设置窗体大小
- 窗体的大小可以通过设置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()
增加一个按钮组件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()
改变按钮前景色和背景色
- 可以用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()
处理按钮点击事件
当点击按钮的时候,按钮应该有反馈的动作
#定义函数 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()
文本输入框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()
- 输入文本后,并没有其他变化,这时候可以将输入加入事件来显示
#加入变量,以便让输入有所作为 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()
设置焦点
- 光标默认焦点,方便输入数据
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()
- 要取得选中项,可以用
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()
设置复选框的选中状态
- 可以用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()
- 可以给不同的按钮设置不同的事件功能
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()
增加文本框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()
插入内容到SCROLLEDTEXT
txt.insert(INSERT,'可以敲入内容到这里,使用变量也可以')
删除SCROLLEDTEXT内容
txt.delete(1.0,END)
建立消息框MESSAGEBOX
from tkinter import messagebox messagebox.showinfo('标题','消息内容')
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()
显示警告和错误消息框
#显示警告框 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)
- 也可以用以下方便,选择特定的值,而不是范围
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()
增加文件对话框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()
- 添加菜单项
menu.add_cascade(label='文件', menu=new_item)
- 用这个方法可以添加很多菜单项包括分割线
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()
- 如果你单击“文件”和“新建”之间的那条虚线,会跳出一个小的窗口只有菜单
- 可以用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()
- 用这种方法可以添加很多书签
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中