Qt Designer 是 Qt 框架提供的可视化 UI 设计工具,允许开发者通过拖放组件的方式快速构建图形用户界面,而无需手动编写大量布局代码。它生成的界面文件(.ui)可被 PySide6(或 PyQt)直接加载,极大提升 Python GUI 开发效率。
在本文中,你将学会使用 QtDesigner 设计 UI,并在 Python 中使用它;
使用 Qt Designer 设计 UI
打开 Qt Designer
Qt Designer 不需要独立下载,在安装 PySide6 后,你可以在.\Python311\Scripts
找到pyside6-designer.exe
;其中Python311
是 Python 的安装文件夹;
或者直接在终端运行命令pyside6-designer
打开 Qt Designer;
设计窗体
打开 Qt Designer 后,创建一个Widget
类型的窗体;
通过拖曳的方式,向窗体添加以下控件:

- 2 个 Label
- 2 个 Line Edit
- 1 个 Push Button
在【视图】菜单中打开【属性检查器】,或使用快捷键Ctrl + I打开;
选择对应的控件,调整大小和位置,并完成以下属性的修改:
控件 | 属性 | 值 |
---|---|---|
Label1 | text | 用户名: |
Label2 | text | 密码: |
Line Edit 1 | objectName | txtUser |
maxLength | 16 | |
Line Edit 2 | objectName | txtPassword |
maxLength | 16 | |
echoMode | Password | |
Push Button | objectName | btnLogin |
text | 登录 | |
窗体(Form) | objectName | frmLogin |
预览效果
可以通过快捷键Ctrl + R预览效果,也可通过菜单【窗体】【预览于】选择预览风格;

添加信号与槽函数
从工具栏(下图中黄色高亮按钮)或快捷键F4切换到【编辑信号\槽】模式;如需返回【编辑窗口部件】模式,可通过下图中淡绿色按钮;

按住登录按钮,然后拖动鼠标,在窗体上的空白处松开(不要拖动到其他控件上);此行为将打开登录按钮的信号与槽函数连接窗口:

选择clicked()
,然后点击编辑(右边列表),添加一个名为login()
的槽函数;选择login()
并点击确定按钮;

保存文件
将设计好的 UI 保存为login.ui
在 Python 中使用 UI
有两种方式在 Python 中加载 Qt Designer 设计好的 UI:
- 将
.ui
文件转换成 Python 代码(推荐使用); - 动态加载
.ui
文件;
将 UI 文件转换成 Python 代码
在终端使用以下命令将保存的.ui
文件转换为.py
文件:
pyside6-uic.exe
与 Qt Designer 在同一文件夹;
UI 被修改后需要重新生成新的 Python 代码;
pyside6-uic.exe login.ui -o ui_login.py
命令执行完后将生成一个ui_login.py
文件,代码中创建了一个Ui_frmLogin
的类以及setupUi
方法,用于初始化控件;
示例代码如下:
import sys
from PySide6 import QtCore, QtWidgets, QtGui
import ui_login #导入ui_login.py
class LoginWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.ui = ui_login.Ui_frmLogin()#实例化UI对象
self.ui.setupUi(self)#初始化
@QtCore.Slot()#槽函数用它装饰
def login(self): #在Qt Designer中为登录按钮命名的槽函数;
print(self.ui.txtUser.text(),self.ui.txtPassword.text())
if __name__ == "__main__":
app = QtWidgets.QApplication([])
widget = LoginWidget()
widget.show()
sys.exit(app.exec())
动态加载 .ui 文件
使用此方法不要在 Qt Designer 中设置信号与槽,会导致无效!
示例代码如下:
import sys
from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtUiTools import QUiLoader
from PySide6.QtCore import QFile
class LoginWidget(QWidget):
def __init__(self):
super().__init__()
loader = QUiLoader() # 创建 QUiLoader 对象用于加载 .ui 文件
ui_file = QFile("login.ui") # 指定要加载的 UI 文件
ui_file.open(QFile.ReadOnly) # 以只读模式打开 UI 文件
# 加载 UI 文件,返回一个 QWidget 实例
self.ui = loader.load(ui_file, self)
ui_file.close() # 关闭 UI 文件
#动态加载需要自行处理信号与槽
#将 btnLogin 的点击行为连接到 login 方法
self.ui.btnLogin.clicked.connect(self.login)
def login(self):
print(self.ui.txtUser.text(),self.ui.txtPassword.text())
if __name__ == "__main__":
app = QApplication([])
widget = LoginWidget()
widget.show()
sys.exit(app.exec())