Qt Designer 快速上手教程
引言
Qt Designer 是一个强大的图形用户界面(GUI)设计工具,它是 Qt 框架的一部分,允许开发者通过拖放的方式,无需编写大量代码即可快速构建出精美且功能丰富的用户界面。它极大地简化了 UI 开发过程,使得设计与代码逻辑能够有效分离,提高了开发效率和代码的可维护性。本文将指导您如何快速上手使用 Qt Designer,并将其与 Python(特别是 PyQt 或 PySide)应用程序结合使用。
1. 安装与启动 Qt Designer
要使用 Qt Designer,您需要先安装 Python 的 Qt 绑定库,如 PyQt 或 PySide。Qt Designer 通常作为这些库的工具集的一部分提供。
安装 PyQt5/PyQt6 或 PySide2/PySide6:
打开您的命令行或终端,并根据您选择的库运行以下命令:
- 对于 PyQt5:
bash
pip install PyQt5 PyQt5-tools - 对于 PyQt6:
bash
pip install PyQt6 PyQt6-tools - 对于 PySide2:
bash
pip install PySide2 - 对于 PySide6:
bash
pip install PySide6
PyQt5-tools 或 PyQt6-tools 通常包含了 Qt Designer 的可执行文件。对于 PySide,Qt Designer 通常直接包含在 PySide2 或 PySide6 包中。
启动 Qt Designer:
安装完成后,Qt Designer 的启动方式取决于您的操作系统和安装方式:
- Windows 用户:
- 您可以在 Python 安装目录下的
Lib/site-packages/PyQt5_tools/designer.exe(对于 PyQt5) 或Lib/site-packages/PySide6/designer.exe(对于 PySide6) 等路径找到并双击designer.exe启动。 - 如果已将相关目录添加到系统 PATH,或者使用了特定的安装器,您可能可以直接在命令行中输入
designer或pyside6-designer来启动。
- 您可以在 Python 安装目录下的
- 其他操作系统用户:
- 在 Linux/macOS 上,您可能需要查找对应的可执行文件,或者通过安装 Qt 官方 SDK 来获取。
- 某些 IDE(如 PyCharm)的插件也可能提供直接启动 Qt Designer 的选项。
2. 创建第一个 UI
启动 Qt Designer 后,您将看到一个欢迎界面或“新建窗体”对话框。
- 选择模板: 在“新建窗体”对话框中,选择一个适合您应用程序类型的模板。对于常见的桌面应用,通常选择
Main Window(主窗口) 或Widget(小部件)。我们这里选择Main Window。 - 拖放控件:
- 在 Qt Designer 界面的左侧是“Widget Box”(控件工具箱),其中包含了各种可用的 UI 控件(Widgets),如按钮、标签、文本框等。
- 从“Widget Box”中,拖动一个
QLabel(标签) 到主窗口的中央。 - 再拖动一个
QPushButton(按钮) 到主窗口下方。
- 修改属性:
- 选中您拖放到窗口上的
QLabel控件。在界面的右侧是“Property Editor”(属性编辑器),您可以在这里修改选中控件的各种属性。 - 找到
QLabel的text属性,将其值修改为“Hello, Qt Designer!”。 - 选中
QPushButton,将其text属性修改为“点击我”。 - 您还可以调整控件的
geometry(几何尺寸)、font(字体) 等属性,使其符合您的设计要求。
- 选中您拖放到窗口上的
- 应用布局 (推荐): 为了让您的界面在不同窗口尺寸下都能保持良好的显示效果,强烈建议使用布局管理器。
- 点击主窗口的空白区域,确保选中了整个窗口。
- 在菜单栏中选择
Form(窗体) ->Lay Out(布局) ->Lay Out Vertically(垂直布局) 或Lay Out Horizontally(水平布局)。这将自动根据控件的排列方向进行布局,并使其在窗口大小改变时自动调整。
3. 保存 .ui 文件
完成界面设计后,您需要将其保存为一个 .ui 文件。这个文件实际上是一个 XML 格式的描述文件,包含了您设计的界面结构和控件属性。
- 点击菜单栏中的
File(文件) ->Save As...(另存为…)。 - 选择一个合适的保存路径和文件名,例如
my_first_ui.ui。
4. Python 中使用 .ui 文件
有以下两种主要方法可以在 Python 应用程序中使用您设计好的 .ui 文件:
方法一:将 .ui 文件转换为 .py 文件
这是最常见和推荐的方法之一。它将 .ui 文件中的 XML 定义转换为等效的 Python 类代码。
- 打开命令行/终端,导航到您保存
my_first_ui.ui文件的目录。 -
运行转换命令:
- 对于 PyQt5:
bash
pyuic5 -x my_first_ui.ui -o my_first_ui.py
这里的-x选项会生成一个包含main函数的可执行 Python 文件,可以直接运行以显示界面。 - 对于 PyQt6:
bash
pyuic6 -x my_first_ui.ui -o my_first_ui.py - 对于 PySide6:
bash
pyside6-uic my_first_ui.ui -o my_first_ui.py
请注意,pyside6-uic默认不生成-x选项那样的可执行代码,您可能需要手动添加运行逻辑。
执行此命令后,会在当前目录下生成一个名为
my_first_ui.py的 Python 文件。 - 对于 PyQt5:
-
查看生成的 Python 代码:
打开my_first_ui.py文件,您会看到一个名为Ui_MainWindow(如果您选择了Main Window模板) 的 Python 类。这个类包含了您在 Designer 中设计的所有界面元素及其初始化代码。 -
创建并运行您的 Python 应用程序:
创建一个新的 Python 文件 (例如app.py),并写入以下代码:“`python
import sys
from PyQt5 import QtWidgets # 或者 PyQt6, PySide6
from my_first_ui import Ui_MainWindow # 导入生成的UI类class MyWindow(QtWidgets.QMainWindow):
def init(self):
super().init()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)# 连接信号与槽 (下一步将详细介绍) # 假设你在 Designer 中按钮的 objectName 是 pushButton,标签的 objectName 是 label self.ui.pushButton.clicked.connect(self.on_button_click) def on_button_click(self): """当按钮被点击时调用的槽函数""" self.ui.label.setText("按钮被点击了!") # 修改标签文本if name == “main“:
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
``python app.py`,您将看到在 Qt Designer 中设计的界面。
运行
方法二:直接加载 .ui 文件
这种方法在运行时直接加载 .ui 文件,而不需要将其转换为 .py 文件。这在某些情况下提供更大的灵活性,您可以在不重新生成 Python 代码的情况下修改 UI 设计。
“`python
import sys
from PyQt5 import QtWidgets, uic # 或者 PyQt6, PySide6
class MyWindow(QtWidgets.QMainWindow):
def init(self):
super().init()
# 直接加载 .ui 文件
uic.loadUi(“my_first_ui.ui”, self)
# 现在可以通过 self.控件名称 访问 Designer 中的控件
# 假设按钮的 objectName 是 pushButton,标签是 label
self.pushButton.clicked.connect(self.on_button_click)
def on_button_click(self):
"""当按钮被点击时调用的槽函数"""
self.label.setText("按钮被点击了!") # 修改标签文本
if name == “main“:
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
“`
5. 信号与槽 (Signals & Slots)
信号与槽是 Qt 框架中特有的、用于对象间通信的强大机制。当一个特定事件发生时(例如用户点击了按钮),发出事件的控件会发射一个“信号”。您可以将这个信号连接到另一个对象上的一个“槽”(一个函数或方法),当信号被发射时,与之相连的槽就会自动被调用。
在上面的 Python 代码示例中,我们演示了如何连接信号与槽:
python
self.ui.pushButton.clicked.connect(self.on_button_click)
self.ui.pushButton:这是您在 Qt Designer 中创建并命名为pushButton的按钮对象。.clicked:这是QPushButton控件发出的一个内置信号,表示按钮被点击。.connect():这是一个用于连接信号和槽的方法。self.on_button_click:这是我们自定义的一个槽函数,当pushButton的clicked信号发出时,这个函数就会被执行。在示例中,它用于更新QLabel的文本。
总结
通过上述步骤,您已经掌握了 Qt Designer 的快速上手方法:从界面的可视化设计,到将设计保存为 .ui 文件,再到如何在 Python 应用程序中集成和运行这些界面,以及如何使用信号与槽机制来实现交互逻辑。Qt Designer 极大地降低了 GUI 开发的门槛,让您可以更专注于应用程序的核心功能,而不是繁琐的界面布局代码。