Qt Designer 和 PyQt 开发教程

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。

🍎个人主页:Java Fans的博客

🍊个人信条:不迁怒,不贰过。小知识,大智慧。

💞当前专栏:Python案例分享专栏

✨特色专栏:国学周更-心性养成之路

🥭本文内容:Qt Designer 和 PyQt 开发教程

文章目录

    • 一、环境安装
      • [1. 确认 Python 已安装](#1. 确认 Python 已安装)
      • [2. 确认 pip 已安装](#2. 确认 pip 已安装)
      • [2. 安装 PyQt5](#2. 安装 PyQt5)
      • [3. 启动 Qt Designer](#3. 启动 Qt Designer)
    • [二、Qt Designer 基础](#二、Qt Designer 基础)
      • [1. Qt Designer 介绍](#1. Qt Designer 介绍)
      • [2. 常用控件](#2. 常用控件)
      • [3. 设计界面步骤](#3. 设计界面步骤)
    • [三、PyQt5 使用 Qt Designer 设计的界面](#三、PyQt5 使用 Qt Designer 设计的界面)
      • [1. 将 `.ui` 文件转换为 Python 代码](#1. 将 .ui 文件转换为 Python 代码)
      • [2. 直接加载 `.ui` 文件(推荐)](#2. 直接加载 .ui 文件(推荐))
    • [四、PyQt5 基础示例](#四、PyQt5 基础示例)
      • [1. 简单窗口示例](#1. 简单窗口示例)
    • [五、信号与槽机制(Signal & Slot)](#五、信号与槽机制(Signal & Slot))
      • [1. 什么是信号与槽?](#1. 什么是信号与槽?)
      • [2. 连接信号与槽](#2. 连接信号与槽)
      • [3. 自定义信号](#3. 自定义信号)
    • 六、布局管理
      • [1. 为什么需要布局?](#1. 为什么需要布局?)
      • [2. 常用布局](#2. 常用布局)
      • [3. 布局示例](#3. 布局示例)
    • 七、常用控件事件处理
      • [1. QPushButton 点击事件](#1. QPushButton 点击事件)
      • [2. QLineEdit 文本变化事件](#2. QLineEdit 文本变化事件)
      • [3. QComboBox 选择变化事件](#3. QComboBox 选择变化事件)
    • [八、使用 Qt Designer 设计复杂界面示例](#八、使用 Qt Designer 设计复杂界面示例)
      • [1. 直接加载 UI 文件](#1. 直接加载 UI 文件)
      • [2. 通过 pyuic5 转换 UI 文件](#2. 通过 pyuic5 转换 UI 文件)
    • 九、进阶技巧
      • [1. 多线程与界面响应](#1. 多线程与界面响应)
      • [2. 样式表(QSS)](#2. 样式表(QSS))
      • [3. 国际化支持](#3. 国际化支持)
    • 总结

一、环境安装

好的!我来详细讲解在命令行(Windows CMD、PowerShell、Linux 终端或 macOS 终端)中安装 Python 相关库的全过程,包括环境准备、常用命令、常见问题及解决方案。

1. 确认 Python 已安装

打开命令行,输入:

bash 复制代码
python --version

bash 复制代码
python3 --version

如果显示版本号(如 Python 3.10.4),说明已安装。

如果提示"命令未找到",需要先安装 Python,并且确保安装时勾选了"Add Python to PATH"(添加到环境变量)。

2. 确认 pip 已安装

pip 是 Python 的包管理工具,Python 3.4+ 默认自带。

检查 pip 版本:

bash 复制代码
pip --version

bash 复制代码
pip3 --version

如果提示未找到命令,可以尝试:

bash 复制代码
python -m ensurepip --default-pip

或重新安装 Python。

2. 安装 PyQt5

PyQt5 是 Python 绑定的 Qt 库,支持使用 Qt Designer 设计界面后进行开发。

打开命令行,执行:

bash 复制代码
pip install PyQt5 PyQt5-tools
  • PyQt5 是核心库
  • PyQt5-tools 包含 Qt Designer 等工具

3. 启动 Qt Designer

安装完成后,Qt Designer 可执行文件通常在:

  • Windows: Python安装目录\Lib\site-packages\pyqt5_tools\Qt\bin\designer.exe
  • 也可以直接在命令行输入:
bash 复制代码
designer

如果命令无效,可以手动找到路径启动。

以上操作均无找到时,使用以下方式在命令行输入:

bash 复制代码
 pip install -i http://pypi.doubanio.com/simple/ PySide6 --trusted-host pypi.doubanio.com
Looking in indexes: http://pypi.doubanio.com/simple/

二、Qt Designer 基础

1. Qt Designer 介绍

Qt Designer 是一个可视化界面设计工具,支持拖拽控件,快速搭建界面。

2. 常用控件

  • QPushButton:按钮
  • QLabel:标签
  • QLineEdit:单行文本输入框
  • QTextEdit:多行文本输入框
  • QComboBox:下拉框
  • QCheckBox:复选框
  • QRadioButton:单选按钮
  • QWidget:窗口基类

3. 设计界面步骤

  1. 新建一个 Widget 或 MainWindow 窗口
  2. 拖拽控件到窗口
  3. 设置控件属性(右侧属性编辑器)
  4. 保存为 .ui 文件,比如 mainwindow.ui

三、PyQt5 使用 Qt Designer 设计的界面

1. 将 .ui 文件转换为 Python 代码

使用 pyuic5 工具将 .ui 文件转换为 .py 文件:

bash 复制代码
pyuic5 -o mainwindow.py mainwindow.ui
  • mainwindow.ui 是设计好的界面文件
  • mainwindow.py 是生成的 Python 界面代码

2. 直接加载 .ui 文件(推荐)

也可以直接在代码中加载 .ui 文件,避免转换步骤:

python 复制代码
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('mainwindow.ui', self)  # 加载UI文件

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

四、PyQt5 基础示例

1. 简单窗口示例

python 复制代码
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QVBoxLayout

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('PyQt5 简单示例')
        self.resize(300, 200)

        self.label = QLabel('Hello, PyQt5!', self)
        self.button = QPushButton('点击我', self)
        self.button.clicked.connect(self.on_button_click)

        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.button)
        self.setLayout(layout)

    def on_button_click(self):
        self.label.setText('按钮被点击了!')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())

五、信号与槽机制(Signal & Slot)

1. 什么是信号与槽?

  • 信号(Signal):控件或对象状态发生变化时发出的通知,比如按钮被点击。
  • 槽(Slot):响应信号的函数或方法。

PyQt5 通过信号与槽机制实现控件间的通信和事件处理。

2. 连接信号与槽

示例:

python 复制代码
self.button.clicked.connect(self.on_button_click)
  • clicked 是 QPushButton 的信号
  • on_button_click 是槽函数

3. 自定义信号

可以在自定义类中定义信号:

python 复制代码
from PyQt5.QtCore import pyqtSignal, QObject

class MyObject(QObject):
    my_signal = pyqtSignal(str)  # 定义带参数的信号

    def do_something(self):
        self.my_signal.emit('Hello from signal!')

然后连接:

python 复制代码
obj = MyObject()
obj.my_signal.connect(lambda msg: print(msg))
obj.do_something()

六、布局管理

1. 为什么需要布局?

布局管理器自动调整控件大小和位置,适应窗口大小变化,避免控件重叠或空白。

2. 常用布局

  • QHBoxLayout:水平布局
  • QVBoxLayout:垂直布局
  • QGridLayout:网格布局
  • QFormLayout:表单布局(标签+控件)

3. 布局示例

python 复制代码
layout = QVBoxLayout()
layout.addWidget(self.label)
layout.addWidget(self.button)
self.setLayout(layout)

七、常用控件事件处理

1. QPushButton 点击事件

python 复制代码
self.button.clicked.connect(self.handle_click)

2. QLineEdit 文本变化事件

python 复制代码
self.line_edit.textChanged.connect(self.on_text_changed)

3. QComboBox 选择变化事件

python 复制代码
self.combo_box.currentIndexChanged.connect(self.on_index_changed)

八、使用 Qt Designer 设计复杂界面示例

假设设计了一个包含 QLabel、QLineEdit、QPushButton 的界面,保存为 form.ui

1. 直接加载 UI 文件

python 复制代码
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys

class Form(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('form.ui', self)

        # 假设控件对象名为 lineEdit, pushButton, label
        self.pushButton.clicked.connect(self.on_button_click)

    def on_button_click(self):
        text = self.lineEdit.text()
        self.label.setText(f'你输入了:{text}')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = Form()
    form.show()
    sys.exit(app.exec_())

2. 通过 pyuic5 转换 UI 文件

bash 复制代码
pyuic5 -o form_ui.py form.ui

然后在代码中导入:

python 复制代码
from PyQt5.QtWidgets import QMainWindow, QApplication
import sys
from form_ui import Ui_MainWindow  # 生成的类名可能不同,需确认

class Form(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.on_button_click)

    def on_button_click(self):
        text = self.lineEdit.text()
        self.label.setText(f'你输入了:{text}')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = Form()
    form.show()
    sys.exit(app.exec_())

九、进阶技巧

1. 多线程与界面响应

PyQt5 支持多线程,避免界面卡顿。可以使用 QThread 或 Python 标准库的 threading

2. 样式表(QSS)

通过样式表美化界面,类似 CSS:

python 复制代码
self.setStyleSheet("QPushButton {background-color: lightblue; font-size: 16px;}")

3. 国际化支持

Qt 支持多语言,结合 .ts 文件和 lupdate 工具实现。


总结

  • Qt Designer 用于快速设计界面,生成 .ui 文件
  • PyQt5 负责加载界面并实现逻辑
  • 可以选择转换 .ui 文件为 .py,也可以直接加载 .ui
  • 通过信号槽机制实现交互(如按钮点击事件)
  • 信号槽机制 是 PyQt5 事件处理核心
  • 布局管理 保证界面自适应
  • Qt Designer + PyQt5 结合使用,极大提高开发效率
  • 通过直接加载 .ui 文件或转换为 .py 文件两种方式灵活选择
  • 进阶功能如多线程、样式表、国际化可根据项目需求逐步掌握

码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目《国学周更---心性养成之路》,学习技术的同时,我们也注重了心性的养成。

相关推荐
RwTo2 小时前
【源码】-Java线程池ThreadPool
java·开发语言
兮动人2 小时前
EMT4J定制规则版:Java 8→17迁移兼容性检测与规则优化实战
java·开发语言·emt4j
一点★2 小时前
Java中的常量池和字符串常量池
java·开发语言
咬人喵喵2 小时前
14 类圣诞核心 SVG 交互方案拆解(附案例 + 资源)
开发语言·前端·javascript
开始了码2 小时前
深入理解回调函数:从概念到 Qt 实战
开发语言·qt
菜鸟plus+2 小时前
Java 接口的演变
java·开发语言
JANGHIGH3 小时前
c++ 多线程(二)
开发语言·c++
Acc1oFl4g3 小时前
详解Java反射
java·开发语言·python
海上彼尚3 小时前
Go之路 - 6.go的指针
开发语言·后端·golang