
✅作者简介: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文件(推荐))
- [1. 将 `.ui` 文件转换为 Python 代码](#1. 将
- [四、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. 设计界面步骤
- 新建一个 Widget 或 MainWindow 窗口
- 拖拽控件到窗口
- 设置控件属性(右侧属性编辑器)
- 保存为
.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知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更---心性养成之路》,学习技术的同时,我们也注重了心性的养成。
