杰瑞科技汇

Python如何创建Windows窗口?

核心概念

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

Python如何创建Windows窗口?-图1
(图片来源网络,侵删)
  1. 导入库:将你选择的 GUI 库导入到你的 Python 脚本中。
  2. 创建主窗口:实例化一个主窗口对象,这将成为你应用程序的容器。
  3. 添加控件:在窗口上添加按钮、文本框、标签等交互元素。
  4. 设置布局:决定这些控件在窗口中的位置和排列方式。
  5. 显示窗口:调用一个方法来启动事件循环,使窗口可见并响应用户操作(如点击、输入)。

主流 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 是由第三方维护的。

Python如何创建Windows窗口?-图2
(图片来源网络,侵删)

安装

你需要使用 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 窗口编程之旅!

分享:
扫描分享到社交APP
上一篇
下一篇