# pyqt-learn **Repository Path**: LadissonGitee/pyqt-learn ## Basic Information - **Project Name**: pyqt-learn - **Description**: 学习一下python qt的基本使用方法。感觉pyqt要比tkinter更好用。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-06 - **Last Updated**: 2025-01-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python-QT开发 Python 和 Qt 的结合是一种强大的开发工具,用于创建跨平台的图形用户界面 (GUI) 应用程序。 **PyQt6** supports Qt6 and runs on Windows (Intel and ARM), macOS (Intel and Apple Silicon) and **Linux (Intel and ARM)**. **PyQt5** supports Qt5 and runs on Windows (Intel), macOS (Intel and Apple Silicon), Android, iOS and Linux (Intel). 因此,由于后面需要上ARM的处理器上面开发,因此后面上**PyQt6**. 以下是关于 Python Qt 开发的基础知识: --- ## 1. **PyQt 和 PySide 简介** - **PyQt** 和 **PySide** 是 Python 的 Qt 框架绑定,提供了与 C++ Qt 相似的功能。 - PyQt 由 Riverbank Computing 开发。 - PySide(又称 Qt for Python)由 Qt 官方提供,完全免费并遵循 LGPL 协议。 - 两者接口相似,开发时可以根据项目需求选择。 --- ## 2. **安装** 使用 pip 安装库: ```bash # 安装 PyQt5 pip install PyQt5 # 或者安装 PySide6 pip install PySide6 ``` --- ## 3. **Qt Designer 工具** - **Qt Designer** 是一个拖放式的 GUI 设计工具,可以快速设计界面。 - 设计完成后保存为 `.ui` 文件。 - 使用 PyQt 或 PySide 提供的工具将 `.ui` 文件转换为 Python 文件: ```bash # PyQt pyuic5 -x input.ui -o output.py # PySide pyside6-uic input.ui -o output.py ``` --- ## 4. **基础结构** Qt 应用的核心是 **事件循环** 和 **控件类**。下面是一个简单的 PyQt5 示例: ```python import sys from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow # 主窗口类 class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Hello Qt") self.setGeometry(100, 100, 600, 400) label = QLabel("Hello, PyQt5!", self) label.move(100, 100) # 程序入口 if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec()) ``` --- ## 5. **常用模块** 以下是 PyQt 和 PySide 中的常用模块: 1. **QtWidgets**:提供窗口、按钮、标签等 GUI 控件。 - `QMainWindow`, `QWidget`, `QPushButton`, `QLabel`, `QLineEdit`, `QTableWidget` 2. **QtCore**:提供核心功能,例如信号与槽、时间、线程、定时器等。 - `QTimer`, `QThread`, `QDateTime` 3. **QtGui**:提供图形相关功能,例如绘图、字体等。 - `QPainter`, `QPixmap`, `QFont` 4. **QtMultimedia**:处理音频和视频。 5. **QtNetwork**:支持网络编程。 6. **QtSql**:与数据库交互。 --- ## 6. **信号与槽机制** Qt 的核心是 **信号与槽**(Signal and Slot)机制,用于处理事件: - **信号**:类似事件触发,例如按钮被点击。 - **槽**:处理信号的函数。 示例代码: ```python from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow import sys class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Signals and Slots") self.setGeometry(100, 100, 400, 300) button = QPushButton("Click Me", self) button.clicked.connect(self.on_button_click) def on_button_click(self): print("Button was clicked!") if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec()) ``` --- ## 7. **布局管理** Qt 提供布局管理类来组织控件: - **QVBoxLayout**:垂直布局。 - **QHBoxLayout**:水平布局。 - **QGridLayout**:网格布局。 - **QFormLayout**:表单布局。 ```python from PyQt5.QtWidgets import QApplication, QVBoxLayout, QPushButton, QWidget class MainWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Layouts Example") layout = QVBoxLayout() layout.addWidget(QPushButton("Button 1")) layout.addWidget(QPushButton("Button 2")) layout.addWidget(QPushButton("Button 3")) self.setLayout(layout) if __name__ == "__main__": app = QApplication([]) window = MainWindow() window.show() app.exec() ``` --- ## 8. **高级功能** - **绘图**:使用 `QPainter` 绘制自定义图形。 - **数据库**:使用 `QtSql` 模块连接和操作数据库。 - **多线程**:使用 `QThread` 实现多任务并行。 - **多媒体**:播放音频和视频。 - **网络编程**:通过 `QtNetwork` 实现 HTTP 或 TCP/IP 通信。 --- ## 9. **资源文件管理** 将图片、图标等资源打包进 `.qrc` 文件,并编译为 Python 文件: ```bash # 编译资源文件 pyrcc5 input.qrc -o output_rc.py ``` 示例: ```python from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow from PyQt5.QtGui import QPixmap class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Resource Example") label = QLabel(self) pixmap = QPixmap("path/to/image.png") label.setPixmap(pixmap) if __name__ == "__main__": app = QApplication([]) window = MainWindow() window.show() app.exec() ``` --- ## 10. **参考文档** - [PyQt5 官方文档](https://riverbankcomputing.com/software/pyqt/intro) - [PySide6 官方文档](https://doc.qt.io/qtforpython/) - [Qt 官方文档](https://doc.qt.io) --- 通过这些基础知识,可以搭建简单的 GUI 应用,并逐步扩展至更复杂的功能。进一步的学习可以结合实际项目练习。