在本教程中,我们将学习如何使用 PyQt 通过 Python 创建桌面应用程序。首先,我们将在您的桌面上创建一系列简单的窗口,以确保 PyQt 正常工作并介绍一些基本概念。然后我们将简要介绍一下事件循环以及它与 Python 中的 GUI 编程的关系。最后,我们将看看 Qt 的 <font style="color:rgb(37, 37, 37);">QMainWindow</font>,它提供了一些有用的通用界面元素,例如工具栏和菜单。这些将在后续教程中更详细地探讨。

安装库

  1. pip install pyqt5
  2. pip install pyqt5-tools

创建单组件应用

在项目的根目录中创建一个空白文件app.py, 输入如下代码

  1. # 从安装的PyQt5的子库QtWidgets中导入应用类和组件类
  2. from PyQt5.QtWidgets import QApplication,QWidget
  3. import sys
  4. # 对于每一个应用来说都是是一个QApplication的实例, 在传入sys.argv参数后
  5. # 意味着当前应用接受命令行信息,如果不接受的话可以通过QApplication([])实例化一个app
  6. app = QApplication(sys.argv)
  7. # 基于QWidgets创建一个window组件
  8. window = QWidget()
  9. # 启动时开启
  10. window.show()
  11. # 启动应用的event loop
  12. app.exec()

启动app

  1. python3 app.py

图1-1 应用成功启动后,桌面上会弹出一个空白窗口

  1. from PyQt5.QtWidgets import QApplication,QPushButton
  2. import sys
  3. app = QApplication(sys.argv)
  4. # 尝试使用别的组件创建window
  5. window = QPushButton()
  6. window.show()
  7. app.exec()

图1-2 应用成功启动后,桌面上会弹出一个仅有且充满视窗的按钮window

什么是Event Loop?

上面的案例中我们提到一个概念Event Loop,那么什么是Event Loop对于每一个Qt应用来说核心是QApplication类,每一个应用都是一个QApplication的实例。该实例维护了一个Event Loop在用户的GUI交互和应用之间构建了交互桥梁。

图3 交互产生的事件进入列队/循环/处理的整个生命周期

既然我们在实际应用中有如此多的交互,所以日常的应用不大可能是单组件应用,上面的案例在实际开发中并不常见,而且我们需要对window做更多设置,通常用到的是QMainWindow来创建多组件应用。

  1. from PyQt5.QtWidgets import QApplication,QMainWindow,QPushButton
  2. import sys
  3. class MainWindow(QMainWindow):
  4. def __init__(self):
  5. super().__init__()
  6. self.setWindowTitle("教学应用")
  7. button = QPushButton("提交")
  8. # 将按钮设置在窗口的中心部位
  9. self.setCentralWidget(button)
  10. # 设置window默认宽高
  11. self.setFixedSize(600,300)
  12. # 设置window最大宽高
  13. self.setMaximumSize(800,400)
  14. # 设置window最小宽高
  15. self.setMinimumSize(200,100)
  16. app =QApplication(sys.argv)
  17. window = MainWindow()
  18. window.show()
  19. app.exec()