核心概念
无论使用哪个库,创建一个窗口的基本步骤都类似:

- 导入库:将你选择的 GUI 库导入到你的 Python 脚本中。
- 创建主窗口:实例化一个主窗口对象,这将成为你应用程序的容器。
- 添加控件:在窗口上添加按钮、文本框、标签等交互元素。
- 设置布局:决定这些控件在窗口中的位置和排列方式。
- 显示窗口:调用一个方法来启动事件循环,使窗口可见并响应用户操作(如点击、输入)。
主流 GUI 库对比
| 库名称 | 特点 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|---|
| Tkinter | Python 内置,无需额外安装 | 简单易学,跨平台,适合快速开发小型应用 | 界面较陈旧,高度自定义能力有限 | 初学者入门、简单的工具、快速原型 |
| PyQt / PySide | 功能强大,基于 Qt 框架 | 界面美观,控件丰富,高度可定制,性能好 | 学习曲线陡峭,API 复杂,有商业版许可限制 | 专业级桌面应用、复杂软件界面 |
| Kivy | 现代化,支持多点触控 | 专注于创建新颖的用户界面,可轻松打包成 Android/iOS 应用 | 对于传统 Windows 界面,可能有点“重” | 创新应用、游戏、多点触控项目 |
| wxPython | 原生外观,基于 wxWidgets | 界面风格与所在平台一致,跨平台 | API 设计有时被认为不够“Pythonic” | 需要与应用程序原生风格保持一致的场景 |
Tkinter (最推荐初学者)
Tkinter 是 Python 的标准 GUI 库,随 Python 安装包一起提供,是学习 GUI 编程的最佳起点。
安装
无需安装,Python 自带。
示例代码:一个简单的窗口
# 1. 导入 tkinter 库
import tkinter as tk
from tkinter import ttk
# 2. 创建主窗口
window = tk.Tk()
window.title("我的第一个 Tkinter 窗口") # 设置窗口标题
window.geometry("400x300") # 设置窗口大小 (宽x高)
window.resizable(False, False) # 禁止调整窗口大小
# 3. 添加控件
# 创建一个标签
label = ttk.Label(window, text="你好,Tkinter!", font=("Arial", 14))
label.pack(pady=20) # pack 是一种布局管理器,pady 是上下边距
# 创建一个输入框
entry = ttk.Entry(window, width=30)
entry.pack(pady=10)
# 创建一个按钮
def on_button_click():
"""按钮点击时的回调函数"""
user_input = entry.get()
label.config(text=f"你输入了: {user_input}")
button = ttk.Button(window, text="点击我", command=on_button_click)
button.pack(pady=10)
# 4. 显示窗口并启动事件循环
# 这行代码必须放在最后,它会一直运行,直到窗口被关闭
window.mainloop()
运行结果: 你会看到一个包含标题、文本、输入框和按钮的窗口,在输入框中输入文字,然后点击按钮,标签上的文字会随之改变。
PyQt / PySide (功能强大)
PyQt 和 PySide 是功能最全面的 GUI 库,它们封装了著名的 Qt 框架,PySide 是 Qt 的官方 Python 绑定,许可证更友好(LGPL),而 PyQt 是由第三方维护的。

安装
你需要使用 pip 进行安装。
# 安装 PySide6 (推荐,较新版本) pip install PySide6 # 或者安装 PyQt6 pip install PyQt6
示例代码:一个简单的窗口 (使用 PySide6)
# 1. 导入 PySide6 库
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QPushButton, QVBoxLayout, QWidget
# 2. 创建主窗口类
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("我的 PyQt 窗口")
self.setGeometry(100, 100, 400, 300) # x, y, width, height
# 创建一个中央控件和布局
central_widget = QWidget()
self.setCentralWidget(central_widget)
layout = QVBoxLayout(central_widget)
# 3. 添加控件
self.label = QLabel("你好,PyQt!")
self.label.setStyleSheet("font-size: 16px;") # 使用样式表美化
layout.addWidget(self.label)
self.entry = QLineEdit()
layout.addWidget(self.entry)
self.button = QPushButton("点击我")
self.button.clicked.connect(self.on_button_click) # 连接信号和槽
layout.addWidget(self.button)
def on_button_click(self):
"""按钮点击时的槽函数"""
user_input = self.entry.text()
self.label.setText(f"你输入了: {user_input}")
# 4. 显示窗口
# 所有 PyQt 应用都必须有一个 QApplication 实例
app = QApplication([])
window = MainWindow()
window.show()
app.exec() # 启动事件循环
运行结果: 这个程序的外观和功能与 Tkinter 示例非常相似,但代码结构是基于类的,这是 PyQt/PySide 的标准做法。
Kivy (现代化)
Kivy 的设计理念与众不同,它使用自己的语言 Kv 来描述 UI,非常适合创建非传统、炫酷的界面。
安装
pip install kivy
示例代码:一个简单的窗口 (使用 Kv 语言)
这个例子会分成两个文件。
main.py
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
# Python 代码部分
class MyWidget(BoxLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.orientation = 'vertical' # 垂直排列
self.padding = 10
self.spacing = 10
self.label = Label(text="你好,Kivy!", font_size=20)
self.button = Button(text="点击我", size_hint=(1, 0.3))
self.button.bind(on_press=self.on_button_click)
self.add_widget(self.label)
self.add_widget(self.button)
def on_button_click(self, instance):
self.label.text = "你点击了按钮!"
# 应用主类
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()
my.kv (与 main.py 同一目录下,文件名必须与 App 类名小写匹配)
# Kv 代码部分,用于描述界面布局和样式
<MyWidget>:
# 可以在这里添加更多样式,但为了简单,Python 代码已足够
pass
运行结果:
运行 main.py,你会看到一个现代化的窗口,控件垂直排列。
wxPython (原生外观)
wxPython 的目标是让你的应用程序看起来就像是用原生语言(如 C++)编写的。
安装
pip install wxPython
示例代码:一个简单的窗口
import wx
# 1. 创建应用程序对象
app = wx.App()
# 2. 创建主窗口
window = wx.Frame(None, title="我的 wxPython 窗口", size=(400, 300))
window.Show(True) # 必须先显示
# 3. 创建面板(通常控件放在面板上)
panel = wx.Panel(window)
# 4. 添加控件
sizer = wx.BoxSizer(wx.VERTICAL) # 使用 sizer 进行布局
label = wx.StaticText(panel, label="你好,wxPython!")
sizer.Add(label, 0, wx.ALL, 10) # 0: 不拉伸, wx.ALL: 四边都有边距, 10: 边距大小
text_ctrl = wx.TextCtrl(panel)
sizer.Add(text_ctrl, 0, wx.ALL | wx.EXPAND, 10) # wx.EXPAND 使其水平填充
def on_button_click(event):
user_input = text_ctrl.GetValue()
label.SetLabel(f"你输入了: {user_input}")
button = wx.Button(panel, label="点击我")
button.Bind(wx.EVT_BUTTON, on_button_click) # 绑定事件
sizer.Add(button, 0, wx.ALL | wx.CENTER, 10) # wx.CENTER 居中
# 将 sizer 应用到面板
panel.SetSizer(sizer)
# 5. 启动主循环
app.MainLoop()
运行结果: 这个窗口的外观会根据你的 Windows 系统主题而变化,非常“原生”。
总结与建议
- 如果你是初学者:从 Tkinter 开始,它最简单,是理解 GUI 编程基本概念的最佳途径。
- 如果你想开发专业、美观的复杂应用:学习 PySide6 或 PyQt6,它们功能强大,是行业标准,但需要投入更多时间学习。
- 如果你想开发创新、跨平台(特别是移动端)的应用:考虑 Kivy。
- 如果你的应用必须和 Windows 系统风格完美融合:试试 wxPython。
希望这个详细的指南能帮助你开始 Python Windows 窗口编程之旅!
