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:

# 安装PyQt5
pip install PyQt5

# 安装Qt设计师和其他工具(可选)
pip install PyQt5-tools

第一个 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_()

代码解析

  1. QApplication:管理 GUI 应用程序的控制流和主设置。
  2. QWidget:最基本的窗口类,所有 UI 组件都继承自它。
  3. setWindowTitle():设置窗口标题。
  4. setGeometry():设置窗口位置和大小。
  5. show():显示窗口。
  6. app.exec_():启动事件循环,等待用户交互。

一个典型的PyQt应用程序包含以下部分:

  1. QApplication对象:每个PyQt应用程序都需要有一个QApplication实例
  2. 窗口和控件:用户界面组件
  3. 事件循环:处理用户输入和系统事件的循环
  4. 事件处理器:响应事件的函数或方法

实例

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://www.runoob.com/python3/python-pyqt-widgets.html


布局管理(QVBoxLayout)

使用布局管理器可以自动调整组件位置:

实例

from PyQt5.QtWidgets import QVBoxLayout, QLabel, QPushButton

layout = QVBoxLayout()
layout.addWidget(QLabel(“用户名”))
layout.addWidget(QLineEdit())
layout.addWidget(QPushButton(“登录”))
window.setLayout(layout)

更多布局管理内容参考:https://www.runoob.com/python3/python-pyqt-layout.html


信号与槽机制

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://www.runoob.com/python3/python-pyqt-signals-and-slots.html


使用 Qt Designer

Qt Designer 是一个可视化设计工具,可以拖放组件来设计界面:

  • 启动 Designer (通常在 Python 安装目录的 Lib\site-packages\qt5_applications\Qt\bin 下)
  • 设计界面并保存为 .ui 文件
  • .ui 文件转换为 Python 代码:

    pyuic5 input.ui -o output.py

在代码中使用生成的界面:

实例

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)使用,灵活性更高。

其他安装扩展:

pip install PyQtWebEngine  # 网页支持
pip install PyQtChart      # 图表支持
组件类别 组件名称 所在模块 说明
基础窗口组件 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

学习资源

本站资源来源互联网,用于互联网爱好者学习和研究,如不慎侵犯了您的权利,请及时联系站长处理删除。敬请谅解!
IT资源网 » Python PyQt

发表回复

提供最优质的资源集合

立即查看 了解详情