用代码创建第一个窗口
说明:本文默认读者已完成 Python 和 PyQt5 的安装。如果你在环境搭建环节遇到困难,可以在评论区留言,后续会考虑单独出一期环境安装的详细教程。
作者使用的开发工具是 PyCharm(社区版即可,免费)。Python 自带的 IDLE 功能较为简陋,不适合后续工程化的代码编写,建议你也安装一款趁手的 IDE,PyCharm 或 VS Code 都是不错的选择。
一、本节目标
- 用纯 Python 代码创建一个 PyQt5 窗口
- 理解一个最小 PyQt5 程序的核心骨架
- 学会设置窗口的标题和大小
二、第一个窗口:完整代码
打开 PyCharm(或你习惯的编辑器),新建一个 Python 文件,命名为 first_window.py,将以下代码完整复制进去:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
# 1. 创建应用程序对象
app = QApplication(sys.argv)
# 2. 创建主窗口对象
window = QMainWindow()
# 3. 设置窗口属性
window.setWindowTitle("我的第一个上位机窗口")
window.resize(600, 400) # 宽600像素,高400像素
# 4. 显示窗口
window.show()
# 5. 进入事件循环
sys.exit(app.exec_())
保存文件后,在 PyCharm 中右键点击代码编辑区,选择 "Run 'first_window'",或者在命令行中执行:
python first_window.py
如果一切正常,你的屏幕上会出现一个标题为"我的第一个上位机窗口"的空白窗口。它可以用鼠标拖动、缩放、最小化、关闭——和任何一个标准的 Windows 应用程序窗口行为完全一致。
三、代码逐行解析
这段代码虽然只有寥寥几行,却是所有 PyQt5 程序的"通用骨架"。
1. 导入模块
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
sys:Python 标准库,用于处理程序退出和命令行参数。QApplication:应用程序类,负责管理整个 GUI 程序的控制流。任何 PyQt5 程序必须有且仅有一个 QApplication 实例。QMainWindow:主窗口类,提供一个带有标题栏、可自由缩放的标准桌面窗口。我们的串口调试助手就用它作为主框架。
2. 创建应用程序对象
app = QApplication(sys.argv)
sys.argv 是 Python 接收命令行参数的列表。将它传给 QApplication,我们的程序就可以响应命令行参数(比如指定界面风格)。即使你暂时用不到,也必须传入这个参数。
3. 创建窗口对象
window = QMainWindow()
调用 QMainWindow() 会创建一个空白的主窗口实例。注意,此时的窗口并不会立刻显示在屏幕上,PyQt5 默认控件创建后是隐藏的。
4. 设置窗口属性
window.setWindowTitle("我的第一个上位机窗口")
window.resize(600, 400)
setWindowTitle(str):设置窗口标题栏显示的文字。在实际项目中,建议写清楚软件用途和版本,如"贴片机监控 V1.0"。resize(width, height):设置窗口的初始宽度和高度,单位是像素。
常用的窗口设置方法还有:
| 方法 | 作用 |
|---|
setMinimumSize(w, h) | 限制窗口的最小尺寸,防止用户缩得太小导致界面变形 |
setMaximumSize(w, h) | 限制窗口的最大尺寸 |
move(x, y) | 设置窗口在屏幕上的初始位置(左上角坐标) |
setGeometry(x, y, w, h) | 同时设置位置和大小 |
5. 显示窗口
window.show()
调用 show() 方法后,窗口才真正渲染到屏幕上。如果没有这一行,程序虽然会在后台运行,但你永远看不到界面。
6. 启动事件循环
sys.exit(app.exec_())
app.exec_():启动 PyQt5 的事件循环。程序进入一个"待命"状态,持续监听用户的鼠标点击、键盘敲击、窗口缩放等操作,并把这些事件分发给对应的代码去处理。- 事件循环会一直运行,直到用户关闭窗口。此时
exec_() 返回一个退出码,sys.exit() 负责将这个码交给操作系统,标志着程序正常退出。
补充:方法名写作 exec_ 而不是 exec,是因为 exec 是 Python 的内置关键字,加下划线是为了避免冲突。
四、面向对象的写法(推荐)
上面的代码是"面向过程"的风格,适合快速测试。但在实际开发中,更推荐将窗口封装成一个类,这样便于后续添加控件和逻辑。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
classMyWindow(QMainWindow):
def__init__(self):
super().__init__()
self.setWindowTitle("面向对象写法")
self.resize(600, 400)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
在这个结构中,窗口的所有属性和后续要添加的控件都被收纳在 MyWindow 类内部。后续我们的代码都将采用这种清晰的面向对象风格。
五、小结
本节我们用纯代码的方式创建了第一个 PyQt5 窗口,核心步骤只有五步:
- 创建
QApplication - 创建
QMainWindow - 设置窗口属性(标题、大小)
- 调用
show() 显示 - 启动
exec_() 事件循环
这个空窗口是所有工控上位机的"地基"。下一节,我们将在地基上添加第一个能与人交互的控件——按钮 QPushButton。