- Python教程
- Python 简介
- Python3 下载安装
- python基础语法
- Python基本数据类型
- Python数据类型转换
- Python解释器
- Python 注释
- Python运算符
- Python数字(Number)
- Python字符串
- Python列表
- Python元组
- Python3 字典
- Python集合
- Python条件控制
- Python循环语句
- Python编程第一步
- Python 推导式
- Python3 迭代器与生成器
- Python函数
- Python lambda(匿名函数)
- Python 装饰器
- Python数据结构
- Python3 模块
- Python __name__ 与 __main__
- Python输入和输出
- Python3 File(文件) 方法
- Python3 OS 文件/目录方法
- Python3 错误和异常
- Python3 面向对象
- Python3 命名空间和作用域
- Python3 标准库概览
- -----高级教程----------
- Python3 正则表达式
- Python CGI编程
- Python MySQL - mysql-connector 驱动
- Python3 MySQL 数据库连接 - PyMySQL 驱动
- Python3 网络编程
- Python3 SMTP发送邮件
- Python3 多线程
- Python3 XML 解析
- Python3 JSON 数据解析
- Python3 日期和时间
- Python MongoDB
- **Python Mongodb 插入文档
- **Python Mongodb 查询文档
- **Python Mongodb 修改文档
- **Python Mongodb 排序
- **Python Mongodb 删除数据
- Python urllib
- Python uWSGI 安装配置
- Python3 pip
- Anaconda 教程
- Python3 operator 模块
- Python math 模块
- Python requests 模块
- Python random 模块
- Python AI 绘画
- Python statistics 模块
- Python hashlib 模块
- Python 量化
- Python pyecharts 模块
- Python selenium 库
- Python 爬虫 - BeautifulSoup
- Python Scrapy 库
- Python Markdown 生成 HTML
- Python sys 模块
- Python Pickle 模块
- Python subprocess 模块
- Python queue 模块
- Python StringIO 模块
- Python logging 模块
- Python datetime 模块
- Python re 模块
- Python csv 模块
- Python threading 模块
- Python asyncio 模块
- Python PyQt
- **Python PyQt 常用组件
- **Python PyQt 布局管理
- **Python PyQt 信号与槽机制
PyQt 是一个强大的 Python 库,用于创建图形用户界面(GUI),可以用来代替 Python 内置的 Tkinter。
PyQt 是 Qt 框架的 Python 绑定,广泛应用于桌面应用程序开发。
Qt 是一个跨平台的 C++ 应用程序开发框架。
PyQt 允许 Python 开发者利用 Qt 库创建功能强大的 GUI 应用程序。
PyQt 有以下几个主要版本:
PyQt4:基于 Qt4 的绑定
PyQt5:基 于Qt5 的绑定
PyQt6:基于 Qt6 的绑定(最新版本)
安装 PyQt
使用 pip 安装 PyQt5:
第一个 PyQt 程序
创建简单窗口
以下是一个最基本的 PyQt 程序,创建一个空白窗口:
实例
from PyQt5.QtWidgets import QApplication, QWidget # 创建应用实例 app = QApplication([]) # 创建主窗口 window = QWidget() window.setWindowTitle("我的第一个 PyQt 程序") window.setGeometry(100, 100, 400, 300) # (x, y, width, height) # 显示窗口 window.show() # 运行应用 app.exec_()
代码解析
QApplication
:管理 GUI 应用程序的控制流和主设置。QWidget
:最基本的窗口类,所有 UI 组件都继承自它。setWindowTitle()
:设置窗口标题。setGeometry()
:设置窗口位置和大小。show()
:显示窗口。app.exec_()
:启动事件循环,等待用户交互。
一个典型的PyQt应用程序包含以下部分:
QApplication对象:每个PyQt应用程序都需要有一个QApplication实例
窗口和控件:用户界面组件
事件循环:处理用户输入和系统事件的循环
事件处理器:响应事件的函数或方法
实例
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton class MainWindow(QMainWindow): def __init__(self): super().__init__() # 设置窗口标题和大小 self.setWindowTitle("我的第一个PyQt应用") self.setGeometry(100, 100, 400, 300) # x, y, width, height # 创建按钮 self.button = QPushButton("点击我", self) self.button.setGeometry(150, 150, 100, 30) self.button.clicked.connect(self.button_clicked) def button_clicked(self): print("按钮被点击了!") if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_())
常用 PyQt 组件
按钮(QPushButton)
实例
from PyQt5.QtWidgets import QPushButton button = QPushButton("点击我", window) button.move(150, 150) # 设置按钮位置
标签(QLabel)
实例
from PyQt5.QtWidgets import QLabel label = QLabel("Hello PyQt!", window) label.move(100, 100)
文本框(QLineEdit)
实例
from PyQt5.QtWidgets import QLineEdit textbox = QLineEdit(window) textbox.move(100, 50)
更多常用组件内容参考:https://kuaikuaixuan.com/p/jiaocheng.php?id=29&zhang=1916
布局管理(QVBoxLayout)
使用布局管理器可以自动调整组件位置:
实例
from PyQt5.QtWidgets import QVBoxLayout, QLabel, QPushButton layout = QVBoxLayout() layout.addWidget(QLabel("用户名")) layout.addWidget(QLineEdit()) layout.addWidget(QPushButton("登录")) window.setLayout(layout)
更多布局管理内容参考:https://kuaikuaixuan.com/p/jiaocheng.php?id=29&zhang=1917
信号与槽机制
PyQt 使用信号(Signal)和槽(Slot)机制处理事件。
PyQt 的信号和槽机制是用于对象之间通信的核心机制。
信号(Signal): 当特定事件发生时发出的通知
槽(Slot): 响应信号的函数或方法
实例
from PyQt5.QtWidgets import QPushButton def on_button_click(): print("按钮被点击了!") button = QPushButton("点击我", window) button.clicked.connect(on_button_click) # 连接信号和槽
自定义信号
实例
from PyQt5.QtCore import pyqtSignal, QObject class MyEmitter(QObject): my_signal = pyqtSignal(str) # 定义一个信号 emitter = MyEmitter() emitter.my_signal.connect(lambda x: print(f"收到信号: {x}")) emitter.my_signal.emit("Hello") # 触发信号
更多信号与槽机制内容参考:https://kuaikuaixuan.com/p/jiaocheng.php?id=29&zhang=1918
使用 Qt Designer
Qt Designer 是一个可视化设计工具,可以拖放组件来设计界面:
启动 Designer (通常在 Python 安装目录的 Lib\site-packages\qt5_applications\Qt\bin 下)
设计界面并保存为 .ui 文件
将 .ui 文件转换为 Python 代码:
在代码中使用生成的界面:
实例
from PyQt5 import uic # 加载UI文件 Form, Window = uic.loadUiType("output.ui") # 使用UI app = QApplication(sys.argv) window = Window() form = Form() form.setupUi(window) window.show() sys.exit(app.exec_())
实战:简单的记事本应用
界面设计
实例
import sys from PyQt5.QtWidgets import (QApplication, QMainWindow, QTextEdit, QAction, QFileDialog, QMessageBox) class Notepad(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.text_edit = QTextEdit(self) self.setCentralWidget(self.text_edit) self.create_actions() self.create_menus() self.setWindowTitle('简易记事本') self.setGeometry(100, 100, 800, 600) def create_actions(self): # 文件菜单动作 self.new_action = QAction('新建', self) self.new_action.setShortcut('Ctrl+N') self.new_action.triggered.connect(self.new_file) self.open_action = QAction('打开', self) self.open_action.setShortcut('Ctrl+O') self.open_action.triggered.connect(self.open_file) self.save_action = QAction('保存', self) self.save_action.setShortcut('Ctrl+S') self.save_action.triggered.connect(self.save_file) self.exit_action = QAction('退出', self) self.exit_action.setShortcut('Ctrl+Q') self.exit_action.triggered.connect(self.close) # 编辑菜单动作 self.copy_action = QAction('复制', self) self.copy_action.setShortcut('Ctrl+C') self.copy_action.triggered.connect(self.text_edit.copy) self.paste_action = QAction('粘贴', self) self.paste_action.setShortcut('Ctrl+V') self.paste_action.triggered.connect(self.text_edit.paste) self.cut_action = QAction('剪切', self) self.cut_action.setShortcut('Ctrl+X') self.cut_action.triggered.connect(self.text_edit.cut) def create_menus(self): menubar = self.menuBar() # 文件菜单 file_menu = menubar.addMenu('文件') file_menu.addAction(self.new_action) file_menu.addAction(self.open_action) file_menu.addAction(self.save_action) file_menu.addSeparator() file_menu.addAction(self.exit_action) # 编辑菜单 edit_menu = menubar.addMenu('编辑') edit_menu.addAction(self.copy_action) edit_menu.addAction(self.paste_action) edit_menu.addAction(self.cut_action) def new_file(self): self.text_edit.clear() def open_file(self): filename, _ = QFileDialog.getOpenFileName(self, '打开文件') if filename: try: with open(filename, 'r') as f: self.text_edit.setText(f.read()) except Exception as e: QMessageBox.warning(self, '错误', f'无法打开文件: {e}') def save_file(self): filename, _ = QFileDialog.getSaveFileName(self, '保存文件') if filename: try: with open(filename, 'w') as f: f.write(self.text_edit.toPlainText()) except Exception as e: QMessageBox.warning(self, '错误', f'无法保存文件: {e}') if __name__ == '__main__': app = QApplication(sys.argv) notepad = Notepad() notepad.show() sys.exit(app.exec_())
PyQt5 核心组件
大多数组件位于 PyQt5.QtWidgets。
高级功能(如多媒体、网络)可能需要其他模块(如 QtCore, QtGui, QtNetwork 等)。
QListView/QTableView/QTreeView 需要搭配数据模型(如 QStandardItemModel)使用,灵活性更高。
其他安装扩展:
组件类别 | 组件名称 | 所在模块 | 说明 |
---|---|---|---|
基础窗口组件 | QWidget | QtWidgets | 所有用户界面对象的基类,可作为空白窗口或容器 |
QMainWindow | QtWidgets | 主窗口框架,包含菜单栏、工具栏、状态栏等 | |
QDialog | QtWidgets | 对话框基类,用于弹出窗口 | |
布局管理 | QVBoxLayout | QtWidgets | 垂直布局管理器 |
QHBoxLayout | QtWidgets | 水平布局管理器 | |
QGridLayout | QtWidgets | 网格布局管理器 | |
QFormLayout | QtWidgets | 表单布局管理器(标签+输入框对) | |
按钮类 | QPushButton | QtWidgets | 普通按钮 |
QRadioButton | QtWidgets | 单选按钮 | |
QCheckBox | QtWidgets | 复选框 | |
QToolButton | QtWidgets | 工具栏按钮(可带图标) | |
输入控件 | QLineEdit | QtWidgets | 单行文本输入框 |
QTextEdit | QtWidgets | 多行富文本编辑器(支持HTML) | |
QPlainTextEdit | QtWidgets | 多行纯文本编辑器 | |
QSpinBox | QtWidgets | 数字调节框(整数) | |
QDoubleSpinBox | QtWidgets | 数字调节框(浮点数) | |
QComboBox | QtWidgets | 下拉选择框 | |
QDateEdit | QtWidgets | 日期选择框 | |
QTimeEdit | QtWidgets | 时间选择框 | |
QDateTimeEdit | QtWidgets | 日期时间选择框 | |
QSlider | QtWidgets | 滑动条(水平/垂直) | |
QDial | QtWidgets | 圆形旋钮控件 | |
显示控件 | QLabel | QtWidgets | 文本/图片标签 |
QLCDNumber | QtWidgets | LCD数字显示屏 | |
QProgressBar | QtWidgets | 进度条 | |
QStatusBar | QtWidgets | 状态栏(通常用于QMainWindow ) | |
容器类 | QGroupBox | QtWidgets | 分组框(带标题的容器) |
QTabWidget | QtWidgets | 标签页容器 | |
QStackedWidget | QtWidgets | 堆叠容器(每次显示一个子控件) | |
QScrollArea | QtWidgets | 滚动区域容器 | |
QMdiArea | QtWidgets | MDI(多文档界面)区域 | |
列表/表格/树 | QListWidget | QtWidgets | 列表控件(含项管理) |
QTreeWidget | QtWidgets | 树形控件 | |
QTableWidget | QtWidgets | 表格控件 | |
QListView | QtWidgets | 列表视图(需搭配数据模型) | |
QTableView | QtWidgets | 表格视图(需搭配数据模型) | |
QTreeView | QtWidgets | 树形视图(需搭配数据模型) | |
菜单/工具栏 | QMenuBar | QtWidgets | 菜单栏 |
QMenu | QtWidgets | 菜单(可包含子菜单和动作) | |
QToolBar | QtWidgets | 工具栏 | |
QAction | QtWidgets | 动作(用于菜单项、工具栏按钮等) | |
对话框 | QFileDialog | QtWidgets | 文件选择对话框 |
QColorDialog | QtWidgets | 颜色选择对话框 | |
QFontDialog | QtWidgets | 字体选择对话框 | |
QInputDialog | QtWidgets | 输入对话框(文本、数字等) | |
QMessageBox | QtWidgets | 消息提示框(警告、错误、询问等) | |
图形视图 | QGraphicsView | QtWidgets | 图形视图框架(用于2D图形) |
QGraphicsScene | QtWidgets | 图形场景(配合QGraphicsView 使用) | |
其他功能组件 | QCalendarWidget | QtWidgets | 日历控件 |
QSplashScreen | QtWidgets | 启动画面 | |
QSystemTrayIcon | QtWidgets | 系统托盘图标 | |
QWebEngineView | QtWebEngineWidgets | 网页浏览器组件(需单独安装PyQtWebEngine ) |