1. Tkinter
简介
Tkinter 是 Python 的标准 GUI 库,基于 Tk 工具包,是 Python 自带的库,无需额外安装。
Python 五种主流图形用户界面(GUI)编程技术:Tkinter、PyQt/PySide、wxPython、Kivy 和 PySimpleGUI。内容涵盖各库的简介、示例代码、优势与劣势分析,并提供技术对比总结表及选择建议。旨在帮助开发者根据项目需求(如桌面应用、移动应用、快速原型等)选择合适的 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()
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_()
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()
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()
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 | 简单 | 老旧 | 基础 | 小型工具、教学 | Python |
| PyQt | 中等 | 现代化 | 丰富 | 专业应用 | GPL/商业 |
| PySide | 中等 | 现代化 | 丰富 | 专业应用 | LGPL |
| wxPython | 中等 | 原生 | 中等 | 桌面应用 | wxWindows |
| Kivy | 较难 | 自定义 | 特殊 | 移动应用/游戏 | MIT |
| PySimpleGUI | 非常简单 | 取决于后端 | 简单 | 小型工具/原型 | Apache |
每种技术都有其适用场景,选择时应考虑项目需求、团队技能和长期维护计划。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online