完整教程:Qt Designer 和 PyQt 开发教程

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
个人主页:Java Fans的博客
个人信条:不迁怒,不贰过。小知识,大智慧。
当前专栏:Python案例分享专栏
✨特色专栏:国学周更-心性养成之路
本文内容:Qt Designer 和 PyQt 开发教程

在这里插入图片描述

一、环境安装

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

1. 确认 Python 已安装

打开命令行,输入:

python --version

python3 --version

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

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

2. 确认 pip 已安装

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

检查 pip 版本:

pip --version

pip3 --version

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

python -m ensurepip --default-pip

或重新安装 Python。

2. 安装 PyQt5

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

打开命令行,执行:

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
  • 也可以直接在命令行输入:
designer

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

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

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 文件:

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

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

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

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. 简单窗口示例

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. 连接信号与槽

示例:

self.button.clicked.connect(self.on_button_click)
  • clicked 是 QPushButton 的信号
  • on_button_click 是槽函数

3. 自定义信号

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

from PyQt5.QtCore import pyqtSignal, QObject
class MyObject(QObject):
my_signal = pyqtSignal(str)  # 定义带参数的信号
def do_something(self):
self.my_signal.emit('Hello from signal!')

然后连接:

obj = MyObject()
obj.my_signal.connect(lambda msg: print(msg))
obj.do_something()

六、布局管理

1. 为什么需要布局?

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

2. 常用布局

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

3. 布局示例

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

七、常用控件事件处理

1. QPushButton 点击事件

self.button.clicked.connect(self.handle_click)

2. QLineEdit 文本变化事件

self.line_edit.textChanged.connect(self.on_text_changed)

3. QComboBox 选择变化事件

self.combo_box.currentIndexChanged.connect(self.on_index_changed)

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

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

1. 直接加载 UI 文件

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 文件

pyuic5 -o form_ui.py form.ui

然后在代码中导入:

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:

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知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

posted @ 2026-01-21 11:22  gccbuaa  阅读(0)  评论(0)    收藏  举报