
包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】!

分享一Python做GUI的一些小技巧,结合24个实用案例,让你也能轻松做出好看又好用的界面。
1.GUI库的选择:Tkinter, PyQt, wxPython
- Python做GUI的库很多,我比较常用的是Tkinter、PyQt和wxPython。Tkinter是Python自带的,比较简单;PyQt功能强大,但是比较复杂;wxPython则比较灵活。
- 温馨提示: 这里只是一个简单的Tkinter示例,其他两个库的用法会更复杂一些。
import tkinter as tk
window = tk.Tk()
window.title('Tkinter Example')
label = tk.Label(window, text='Hello, Tkinter!')
label.pack()
window.mainloop()
2.基本控件:Label, Button, Entry, Text
- GUI界面是由各种控件组成的,比如标签(Label)、按钮(Button)、输入框(Entry)、文本框(Text)等等。
import tkinter as tk
window = tk.Tk()
label = tk.Label(window, text='Name:')
label.pack()
entry = tk.Entry(window)
entry.pack()
button = tk.Button(window, text='Submit', command=lambda: print(entry.get()))
button.pack()
window.mainloop()
3.布局管理:pack, grid, place
- 控件放好后,需要用布局管理器来安排它们的位置,常用的有
pack
、grid
和place
。
- 温馨提示:
pack
比较简单, grid
比较灵活,place
可以精确控制位置。
import tkinter as tk
window = tk.Tk()
label1 = tk.Label(window, text='Label 1')
label1.pack(side='left')
label2 = tk.Label(window, text='Label 2')
label2.pack(side='right')
label3 = tk.Label(window, text='Label 3')
label3.grid(row=0, column=0)
label4 = tk.Label(window, text='Label 4')
label4.grid(row=1, column=1)
label5 = tk.Label(window, text='Label 5')
label5.place(x=100,y=100)
window.mainloop()
4.事件处理:绑定事件与回调函数
- GUI程序需要处理用户的事件,比如点击按钮,输入文本等等,这时候就需要用到事件绑定和回调函数。
import tkinter as tk
def click_button():
print('Button Clicked!')
window = tk.Tk()
button = tk.Button(window, text='Click Me', command=click_button)
button.pack()
window.mainloop()
5.对话框:messagebox, filedialog, colorchooser
- GUI程序中常常需要用到对话框,比如消息提示、文件选择、颜色选择等等。
import tkinter as tk
from tkinter import messagebox, filedialog, colorchooser
window = tk.Tk()
def show_message():
messagebox.showinfo('Message', 'This is a message.')
tk.Button(window, text='Show Message', command=show_message).pack()
def open_file():
filename = filedialog.askopenfilename()
print(filename)
tk.Button(window, text='Open File', command=open_file).pack()
def choose_color():
color = colorchooser.askcolor()
print(color)
tk.Button(window, text='Choose Color', command=choose_color).pack()
window.mainloop()
6.菜单栏:menubar, menu
import tkinter as tk
window = tk.Tk()
menubar = tk.Menu(window)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label='Open')
filemenu.add_command(label='Save')
filemenu.add_separator()
filemenu.add_command(label='Exit', command=window.quit)
menubar.add_cascade(label='File', menu=filemenu)
window.config(menu=menubar)
window.mainloop()
7.列表框:Listbox
import tkinter as tk
window = tk.Tk()
listbox = tk.Listbox(window)
listbox.insert(1, 'Item 1')
listbox.insert(2, 'Item 2')
listbox.pack()
window.mainloop()
8.单选按钮 Radiobutton
import tkinter as tk
window = tk.Tk()
var = tk.IntVar()
tk.Radiobutton(window, text='Option 1', variable = var, value=1).pack()
tk.Radiobutton(window, text='Option 2', variable = var, value=2).pack()
window.mainloop()
9.复选框 Checkbutton
import tkinter as tk
window = tk.Tk()
var1 = tk.IntVar()
var2 = tk.IntVar()
tk.Checkbutton(window, text = 'Check 1', variable = var1).pack()
tk.Checkbutton(window, text = 'Check 2', variable = var2).pack()
window.mainloop()
10.滑块 Scale
import tkinter as tk
window = tk.Tk()
scale = tk.Scale(window, from_=0, to=100,orient='horizontal')
scale.pack()
window.mainloop()
11.进度条:Progressbar
import tkinter as tk
from tkinter import ttk
window = tk.Tk()
progressbar = ttk.Progressbar(window,orient='horizontal',length=200,mode='determinate')
progressbar.pack()
progressbar['value'] = 50
window.mainloop()
12.图像显示:Canvas
import tkinter as tk
from PIL import Image, ImageTk
window = tk.Tk()
canvas = tk.Canvas(window,width=400,height=300)
canvas.pack()
img = Image.open("test.png")
photo = ImageTk.PhotoImage(img)
canvas.create_image(0,0,anchor='nw',image=photo)
window.mainloop()
13.文本输入框:Text
import tkinter as tk
window = tk.Tk()
text = tk.Text(window,height=5)
text.pack()
window.mainloop()
14.下拉菜单 Combobox
import tkinter as tk
from tkinter import ttk
window = tk.Tk()
combobox = ttk.Combobox(window,values=['Item 1','Item 2','Item 3'])
combobox.pack()
window.mainloop()
15.树状图 Treeview
import tkinter as tk
from tkinter import ttk
window = tk.Tk()
tree = ttk.Treeview(window,columns=('column1','column2'))
tree.heading('column1',text='Column 1')
tree.heading('column2',text='Column 2')
tree.insert('','end',values=('Item 1','Value 1'))
tree.insert('','end',values=('Item 2','Value 2'))
tree.pack()
window.mainloop()
16.框架 Frame
import tkinter as tk
window = tk.Tk()
frame1 = tk.Frame(window,bg='red',width=100,height=100)
frame1.pack(side='left')
frame2 = tk.Frame(window,bg='blue',width=100,height=100)
frame2.pack(side='right')
window.mainloop()
17.选项卡 Notebook
import tkinter as tk
from tkinter import ttk
window = tk.Tk()
notebook = ttk.Notebook(window)
tab1 = ttk.Frame(notebook)
tab2 = ttk.Frame(notebook)
notebook.add(tab1,text='Tab 1')
notebook.add(tab2,text='Tab 2')
notebook.pack()
tk.Label(tab1,text='This is tab 1').pack()
tk.Label(tab2,text='This is tab 2').pack()
window.mainloop()
18.标签页 Panedwindow
import tkinter as tk
window = tk.Tk()
pw = tk.PanedWindow(orient='horizontal')
pw.pack(fill='both',expand=True)
frame1 = tk.Frame(pw,bg='red')
frame2 = tk.Frame(pw,bg='blue')
pw.add(frame1)
pw.add(frame2)
window.mainloop()
19.工具提示 Tooltip
import tkinter as tk
from tkinter import ttk
class ToolTip(object):
def __init__(self, widget, text):
self.widget = widget
self.text = text
self.tipwindow = None
self.widget.bind("", self.showtip)
self.widget.bind("", self.hidetip)
def showtip(self, event):
x, y, _, _ = self.widget.bbox("insert")
x += self.widget.winfo_rootx() + 25
y += self.widget.winfo_rooty() + 25
self.tipwindow = tw = tk.Toplevel(self.widget)
tw.wm_overrideredirect(1)
tw.wm_geometry("+%d+%d" % (x, y))
label = tk.Label(tw, text=self.text, background="#ffffe0", relief='solid', borderwidth=1)
label.pack()
def hidetip(self, event):
tw = self.tipwindow
self.tipwindow = None
if tw:
tw.destroy()
window = tk.Tk()
button = tk.Button(window, text='Hover Me')
button.pack()
tooltip = ToolTip(button, 'This is a tooltip')
window.mainloop()
20.自定义样式:ttk Style
import tkinter as tk
from tkinter import ttk
window = tk.Tk()
style = ttk.Style()
style.configure('TButton',padding = 6,font=('Arial',12),background='lightblue')
button = ttk.Button(window,text='Custom Button')
button.pack()
window.mainloop()
21.跨平台兼容
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200, 100))
panel = wx.Panel(self)
label = wx.StaticText(panel, label="Hello, wxPython!", pos=(25, 25))
self.Show(True)
app = wx.App(False)
frame = MyFrame(None, "wxPython Example")
app.MainLoop()
22.线程处理
import tkinter as tk
import time
import threading
def long_task():
time.sleep(5)
print('Task finished')
def start_task():
thread = threading.Thread(target=long_task)
thread.start()
window = tk.Tk()
button = tk.Button(window, text='Start Task', command = start_task)
button.pack()
window.mainloop()
23.图像处理结合
import tkinter as tk
from PIL import Image, ImageTk
import cv2 def show_image():
img = cv2.imread('test.jpg')
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
img = Image.fromarray(img)
photo = ImageTk.PhotoImage(img)
label.config(image = photo)
label.image = photo
window = tk.Tk()
label = tk.Label(window)
label.pack()
tk.Button(window,text='Show Image',command = show_image).pack()
window.mainloop()
24.打包成可执行文件

总结
- 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!
文末福利
- 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!
- ① Python所有方向的学习路线图,清楚各个方向要学什么东西
- ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
- ③ 100多个Python实战案例,学习不再是只会理论
- ④ 华为出品独家Python漫画教程,手机也能学习
可以扫描下方二维码领取【保证100%免费】