4. PyQt6入门

好,咱们正式开始动手了。前面聊了那么多跨平台的理论,现在终于要碰一碰真正的代码。PyQt6 是我个人非常喜欢的一套工具,说白了,它就是 Qt 的 Python 绑定。你写 Python,它帮你调 C++ 的底层,效率高,还省心。

这一章,咱们把 PyQt6 的环境搭起来,跑通第一个窗口,再聊聊 PyQt6 里最核心的通信机制——信号与槽。嗯,这三件事搞定了,后面写界面就跟搭积木一样。

4.1 PyQt6 安装与验证

安装其实没什么难度。我建议你直接用 pip,干净利落。

pip install PyQt6

如果你用的是国内网络,加个镜像源会快很多。我个人习惯用清华的源:

pip install PyQt6 -i https://pypi.tuna.tsinghua.edu.cn/simple

装完之后怎么验证?写两行代码跑一下就行。

import PyQt6.QtCore
print(PyQt6.QtCore.PYQT_VERSION_STR)

如果能打印出版本号,比如 6.5.0,那就说明装好了。我在项目中遇到过有人装成了 PyQt5,结果跑我的 demo 直接报错。所以,记得确认一下版本。

注意: 不要同时装 PyQt5 和 PyQt6,容易冲突。如果你之前装过 PyQt5,建议先卸载干净。

4.2 QApplication 与 QWidget

每个 PyQt6 程序,都需要一个 QApplication 对象。你可以把它理解成整个应用的“大管家”。它负责事件循环、全局设置、剪贴板管理等等。没有它,窗口就显示不出来。

而 QWidget,就是所有窗口组件的基类。按钮、标签、输入框,甚至整个窗口,本质上都是 QWidget 的子类。

来看一个最简单的例子:

import sys
from PyQt6.QtWidgets import QApplication, QWidget

app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle("我的第一个 PyQt6 窗口")
window.resize(400, 300)
window.show()

sys.exit(app.exec())

这段代码做了几件事:

  • 创建 QApplication 实例,传入命令行参数
  • 创建一个 QWidget 作为主窗口
  • 设置标题和大小
  • 调用 show() 显示窗口
  • 进入事件循环,直到用户关闭窗口

你想想看,如果没有 app.exec(),窗口会一闪而过。因为程序执行完就退出了。事件循环就是让程序“等”在那里,随时响应用户的操作。

小技巧: 我习惯把 sys.argv 传给 QApplication,这样以后如果需要处理命令行参数,就不用改代码了。

4.3 信号与槽机制初探

这是 PyQt6 的灵魂。信号与槽,说白了就是一种对象间的通信方式。一个对象发出信号,另一个对象的槽函数去响应。

举个例子,你点击一个按钮,按钮会发出 clicked 信号。你把这个信号连接到一个函数上,点击按钮时,那个函数就会自动执行。

为什么会这样?因为 Qt 的事件循环一直在监听各种事件。当鼠标点击发生时,Qt 把它包装成一个信号,然后通知所有连接了这个信号的槽函数。

看代码:

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton

def on_button_click():
    print("按钮被点击了!")

app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle("信号与槽示例")
window.resize(300, 200)

button = QPushButton("点我", window)
button.setGeometry(100, 80, 100, 30)
button.clicked.connect(on_button_click)

window.show()
sys.exit(app.exec())

这里 button.clicked.connect(on_button_click) 就是连接信号与槽。点击按钮,控制台就会打印那句话。

嗯,这里要注意:槽函数不能加括号。你写 connect(on_button_click()) 的话,函数会在连接时立即执行,而不是点击时执行。我曾经在这个坑里栽过一次,调试了半天才发现。

4.4 知识体系总览

下面这张图,帮你把本章的核心逻辑串起来。从安装到第一个窗口,再到信号与槽,每一步都是环环相扣的。

PyQt6 入门知识体系 PyQt6 安装 pip install PyQt6 QApplication 应用大管家 QWidget 窗口基类 信号与槽机制 对象间通信的核心 connect(信号, 槽函数) → 事件驱动 安装 → 创建应用 → 构建窗口 → 信号与槽连接 → 事件循环

4.5 避坑指南

最后,分享几个我踩过的坑:

  • 窗口一闪而过:忘了调用 app.exec(),或者忘了 sys.exit()。记住,事件循环是 GUI 程序的命脉。
  • 信号连接没反应:检查槽函数名有没有拼错,或者是不是传了括号。我曾经把 connect(func) 写成了 connect(func()),结果函数在连接时就被调用了。
  • 窗口显示不出来:确认 QApplication 是否在 QWidget 之前创建。顺序反了会报错。
核心总结: PyQt6 的入门其实就三件事——装好环境、创建应用和窗口、学会信号与槽。这三件事搞明白了,后面学布局、学控件都会非常顺畅。

嗯,这一章就到这里。代码不多,但都是基础中的基础。你可以在本地跑一跑,改改标题、改改按钮文字,感受一下 PyQt6 的实时反馈。动手永远是最好的学习方式。