PythonGUI编程从入门到精通,24个实用案例解析

PythonGUI编程从入门到精通,24个实用案例解析_第1张图片


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

PythonGUI编程从入门到精通,24个实用案例解析_第2张图片

分享一Python做GUI的一些小技巧,结合24个实用案例,让你也能轻松做出好看又好用的界面。

1.GUI库的选择:Tkinter, PyQt, wxPython

  • Python做GUI的库很多,我比较常用的是Tkinter、PyQt和wxPython。Tkinter是Python自带的,比较简单;PyQt功能强大,但是比较复杂;wxPython则比较灵活。
  • 温馨提示: 这里只是一个简单的Tkinter示例,其他两个库的用法会更复杂一些。
# 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

  • 控件放好后,需要用布局管理器来安排它们的位置,常用的有packgridplace
  • 温馨提示: pack 比较简单, grid 比较灵活,place 可以精确控制位置。
import tkinter as tk   
window = tk.Tk()   
# pack 布局   
label1 = tk.Label(window, text='Label 1')   
label1.pack(side='left')   
label2 = tk.Label(window, text='Label 2')   
label2.pack(side='right')   
# grid 布局   
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)   
# place 布局   
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

  • GUI程序可以有菜单栏,方便用户操作。
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

  • 在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")
#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

  • 使用ttk设置样式
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.跨平台兼容

  • 使用跨平台的库,比如wxPython
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.线程处理

  • 在GUI中处理耗时任务,使用多线程
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.图像处理结合

  • GUI中结合图像处理库
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.打包成可执行文件

  • 将GUI程序打包成exe可执行文件
# 使用pyinstaller打包,安装命令:pip install pyinstaller   
# 命令行执行:pyinstaller --onefile your_script.py   

图片

总结

  • 最后希望你编程学习上不急不躁,按照计划有条不紊推进,把任何一件事做到极致,都是不容易的,加油,努力!相信自己!

文末福利

  • 最后这里免费分享给大家一份Python全套学习资料,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!
  • ① Python所有方向的学习路线图,清楚各个方向要学什么东西
  • ② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
  • ③ 100多个Python实战案例,学习不再是只会理论
  • ④ 华为出品独家Python漫画教程,手机也能学习

可以扫描下方二维码领取【保证100%免费PythonGUI编程从入门到精通,24个实用案例解析_第3张图片

你可能感兴趣的:(数据库,android,性能优化,python,数据分析,开发语言,Python学习)