文章目录
- Tkinter是Python的标准GUI库,基于Tk工具包,是Python自带的库,无需额外安装。
- import tkinter as tk from tkinter import messagebox def on_click(): messagebox.showinfo(“提示”, f”你好, {entry.get()}!”) root = tk.Tk() root.title(“Tkinter示例”) label = tk.Label(root, text=”请输入你的名字:”) label.pack() entry = tk.Entry(root) entry.pack() button = tk.Button(root, text=”点击”, command=on_click) button.pack() root.mainloop()
- Python标准库,无需额外安装 跨平台支持(Windows, Linux, Mac) 简单易学,适合初学者 轻量级,启动快速
- 界面外观较老旧,现代化程度低 功能相对较少 自定义样式较复杂 性能在处理复杂界面时可能不足
- PyQt和PySide都是Qt框架的Python绑定,功能强大,适合开发专业级应用程序。
- from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QPushButton, QVBoxLayout, QWidget from PyQt5.QtCore import Qt import sys class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle(“PyQt示例”) layout = QVBoxLayout() self.label = QLabel(“请输入你的名字:”) layout.addWidget(self.label) self.entry = QLineEdit() layout.addWidget(self.entry) self.button = QPushButton(“点击”) self.button.clicked.connect(self.on_click) layout.addWidget(self.button) container = QWidget() container.setLayout(layout) self.setCentralWidget(container) def on_click(self): from PyQt5.QtWidgets import QMessageBox QMessageBox.information(self, “提示”, f”你好, {self.entry.text()}!”) app = QApplication(sys.argv) window = MainWindow() window.show() app.exec_()
- 功能非常强大,组件丰富 界面美观,支持现代化UI设计 良好的文档和社区支持 支持信号/槽机制,事件处理优秀 可以创建专业级应用程序
- 需要额外安装(不是Python标准库) 学习曲线较陡峭 应用程序体积较大 商业使用PyQt可能需要购买许可证(PySide是LGPL许可)
- wxPython是wxWidgets的Python绑定,使用原生平台控件,提供原生外观。
- import wx class MyFrame(wx.Frame): def __init__(self): super().__init__(None, title=”wxPython示例”) panel = wx.Panel(self) sizer = wx.BoxSizer(wx.VERTICAL) self.label = wx.StaticText(panel, label=”请输入你的名字:”) sizer.Add(self.label, 0, wx.ALL, 5) self.entry = wx.TextCtrl(panel) sizer.Add(self.entry, 0, wx.EXPAND|wx.ALL, 5) self.button = wx.Button(panel, label=”点击”) self.button.Bind(wx.EVT_BUTTON, self.on_click) sizer.Add(self.button, 0, wx.ALL, 5) panel.SetSizer(sizer) self.Show() def on_click(self, event): wx.MessageBox(f”你好, {self.entry.GetValue()}!”, “提示”) app = wx.App() frame = MyFrame() app.MainLoop()
- 使用原生控件,界面与操作系统风格一致 跨平台支持良好 功能丰富,介于Tkinter和PyQt之间 开源且无商业许可问题
- 文档和社区支持不如PyQt 某些高级功能实现较复杂 更新频率相对较低
- Kivy是一个开源的Python库,用于开发多点触控应用程序,特别适合移动应用和游戏开发。
- from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label from kivy.uix.textinput import TextInput from kivy.uix.button import Button from kivy.uix.popup import Popup class MyApp(App): def build(self): layout = BoxLayout(orientation=’vertical’, spacing=10, padding=10) self.label = Label(text=”请输入你的名字:”) layout.add_widget(self.label) self.entry = TextInput(multiline=False) layout.add_widget(self.entry) self.button = Button(text=”点击”) self.button.bind(on_press=self.on_click) layout.add_widget(self.button) return layout def on_click(self, instance): content = BoxLayout(orientation=’vertical’) content.add_widget(Label(text=f”你好, {self.entry.text}!”)) popup = Popup(title=’提示’, content=content, size_hint=(0.8, 0.4)) popup.open() MyApp().run()
- 专为触摸屏设计,适合移动应用开发 跨平台(包括Android和iOS) 支持OpenGL ES 2,适合游戏开发 可以创建高度自定义的UI
- 桌面应用外观非原生 学习曲线较陡 性能开销较大 不适合传统桌面应用开发
- PySimpleGUI是对Tkinter、Qt、wxPython和Remi的封装,旨在简化GUI开发。
- import PySimpleGUI as sg layout = [ [sg.Text(“请输入你的名字:”)], [sg.Input(key=’-INPUT-‘)], [sg.Button(“点击”), sg.Button(“退出”)] ] window = sg.Window(“PySimpleGUI示例”, layout) while True: event, values = window.read() if event in (sg.WIN_CLOSED, “退出”): break if event == “点击”: sg.popup(f”你好, {values[‘-INPUT-‘]}!”) window.close()
- 极其简单易用 统一了多种后端(Tkinter, Qt, wxPython, Web) 代码量少,开发快速 适合小型工具和快速原型开发
- 功能有限,不适合复杂应用 自定义能力较弱 性能取决于后端选择
目录
- 1. Tkinter
- 简介
- 示例代码
- 优势
- 劣势
- 2. PyQt/PySide
- 简介
- 示例代码(PyQt5)
- 优势
- 劣势
- 3. wxPython
- 简介
- 示例代码
- 优势
- 劣势
- 4. Kivy
- 简介
- 示例代码
- 优势
- 劣势
- 5. PySimpleGUI
- 简介
- 示例代码
- 优势
- 劣势
- 技术对比总结
- 选择建议
Python提供了多种实现图形用户界面(GUI)编程的技术,下面我将详细介绍几种主流技术,并提供示例代码和优劣分析。

Tkinter是Python的标准GUI库,基于Tk工具包,是Python自带的库,无需额外安装。
import tkinter as tk
from tkinter import messagebox
def on_click():
messagebox.showinfo("提示", f"你好, {entry.get()}!")
root = tk.Tk()
root.title("Tkinter示例")
label = tk.Label(root, text="请输入你的名字:")
label.pack()
entry = tk.Entry(root)
entry.pack()
button = tk.Button(root, text="点击", command=on_click)
button.pack()
root.mainloop()
- Python标准库,无需额外安装
- 跨平台支持(Windows, Linux, Mac)
- 简单易学,适合初学者
- 轻量级,启动快速
- 界面外观较老旧,现代化程度低
- 功能相对较少
- 自定义样式较复杂
- 性能在处理复杂界面时可能不足
PyQt和PySide都是Qt框架的Python绑定,功能强大,适合开发专业级应用程序。
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QPushButton, QVBoxLayout, QWidget
from PyQt5.QtCore import Qt
import sys
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PyQt示例")
layout = QVBoxLayout()
self.label = QLabel("请输入你的名字:")
layout.addWidget(self.label)
self.entry = QLineEdit()
layout.addWidget(self.entry)
self.button = QPushButton("点击")
self.button.clicked.connect(self.on_click)
layout.addWidget(self.button)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
def on_click(self):
from PyQt5.QtWidgets import QMessageBox
QMessageBox.information(self, "提示", f"你好, {self.entry.text()}!")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
- 功能非常强大,组件丰富
- 界面美观,支持现代化UI设计
- 良好的文档和社区支持
- 支持信号/槽机制,事件处理优秀
- 可以创建专业级应用程序
- 需要额外安装(不是Python标准库)
- 学习曲线较陡峭
- 应用程序体积较大
- 商业使用PyQt可能需要购买许可证(PySide是LGPL许可)
wxPython是wxWidgets的Python绑定,使用原生平台控件,提供原生外观。
import wx
class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None, title="wxPython示例")
panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL)
self.label = wx.StaticText(panel, label="请输入你的名字:")
sizer.Add(self.label, 0, wx.ALL, 5)
self.entry = wx.TextCtrl(panel)
sizer.Add(self.entry, 0, wx.EXPAND|wx.ALL, 5)
self.button = wx.Button(panel, label="点击")
self.button.Bind(wx.EVT_BUTTON, self.on_click)
sizer.Add(self.button, 0, wx.ALL, 5)
panel.SetSizer(sizer)
self.Show()
def on_click(self, event):
wx.MessageBox(f"你好, {self.entry.GetValue()}!", "提示")
app = wx.App()
frame = MyFrame()
app.MainLoop()
- 使用原生控件,界面与操作系统风格一致
- 跨平台支持良好
- 功能丰富,介于Tkinter和PyQt之间
- 开源且无商业许可问题
- 文档和社区支持不如PyQt
- 某些高级功能实现较复杂
- 更新频率相对较低
Kivy是一个开源的Python库,用于开发多点触控应用程序,特别适合移动应用和游戏开发。
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.popup import Popup
class MyApp(App):
def build(self):
layout = BoxLayout(orientation='vertical', spacing=10, padding=10)
self.label = Label(text="请输入你的名字:")
layout.add_widget(self.label)
self.entry = TextInput(multiline=False)
layout.add_widget(self.entry)
self.button = Button(text="点击")
self.button.bind(on_press=self.on_click)
layout.add_widget(self.button)
return layout
def on_click(self, instance):
content = BoxLayout(orientation='vertical')
content.add_widget(Label(text=f"你好, {self.entry.text}!"))
popup = Popup(title='提示', content=content, size_hint=(0.8, 0.4))
popup.open()
MyApp().run()
- 专为触摸屏设计,适合移动应用开发
- 跨平台(包括Android和iOS)
- 支持OpenGL ES 2,适合游戏开发
- 可以创建高度自定义的UI
- 桌面应用外观非原生
- 学习曲线较陡
- 性能开销较大
- 不适合传统桌面应用开发
PySimpleGUI是对Tkinter、Qt、wxPython和Remi的封装,旨在简化GUI开发。
import PySimpleGUI as sg
layout = [
[sg.Text("请输入你的名字:")],
[sg.Input(key='-INPUT-')],
[sg.Button("点击"), sg.Button("退出")]
]
window = sg.Window("PySimpleGUI示例", layout)
while True:
event, values = window.read()
if event in (sg.WIN_CLOSED, "退出"):
break
if event == "点击":
sg.popup(f"你好, {values['-INPUT-']}!")
window.close()
- 极其简单易用
- 统一了多种后端(Tkinter, Qt, wxPython, Web)
- 代码量少,开发快速
- 适合小型工具和快速原型开发
- 功能有限,不适合复杂应用
- 自定义能力较弱
- 性能取决于后端选择
| 技术 | 学习曲线 | 外观 | 功能 | 适合场景 | 许可证 |
|---|---|---|---|---|---|
| Tkinter | 简单 | 老旧 | 基础 | 小型工具、教学 | Python |
| PyQt | 中等 | 现代化 | 丰富 | 专业应用 | GPL/商业 |
| PySide | 中等 | 现代化 | 丰富 | 专业应用 | LGPL |
| wxPython | 中等 | 原生 | 中等 | 桌面应用 | wxWindows |
| Kivy | 较难 | 自定义 | 特殊 | 移动应用/游戏 | MIT |
| PySimpleGUI | 非常简单 | 取决于后端 | 简单 | 小型工具/原型 | Apache |
- 初学者/小型工具:从Tkinter或PySimpleGUI开始
- 专业桌面应用:选择PyQt/PySide或wxPython
- 移动应用/游戏:考虑Kivy
- 快速原型开发:PySimpleGUI是最佳选择
- 需要原生外观:wxPython是好的选择
每种技术都有其适用场景,选择时应考虑项目需求、团队技能和长期维护计划。
到此这篇关于Python实现窗体编程的五大主流技术与方法详解的文章就介绍到这了,更多相关Python窗体编程内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- Python多窗体执行的实现示例
- Python运行第一个PySide2的窗体程序
- python使用tkinter实现透明窗体
- Python 窗体(tkinter)下拉列表框(Combobox)实例
- python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
- python Qt5实现窗体跟踪鼠标移动