找到Qt Designer
使用pip
命令安装PySide6
后,可以在安装目录的Scripts
文件夹下找到PySide6-designer.exe文件,双击该文件,则可以打开设计窗口。比如说我的电脑,PySide6在D分区下miniconda
的base
环境里安装,那么路径就是D:\miniconda3\Scripts
。
![Pyside6-designer路径]
当然,我们也可以采用直接输入命令的方法打开设计器。
>> PySide6-designer
PySide6设计器主界面如下:
设计界面
以制作一个简单的Widget为例,我们在templates\forms
中选择Widget
,创建一个Widget窗体应用。
可以从左侧拖动控件,绘制我们想要的窗口,也可以通过右侧属性面板,设置相关属性。
举个例子,假如我们要做一个简单的UI转代码界面工具,那么,我们可以拖拉拽和设置操作,做一个以下这样的窗口。
该文件保存为pyside-ui-to-code.ui
,运行如下命令,则可将该文件转换为对应的Python
代码(我们也可以定义为批处理文件、Python代码,甚至GUI程序)。
pyside6-uic pyside-ui-to-code.ui -o pyside_ui_to_code.py
于是,我们可以得到pyside_ui_to_code.py
的代码,之前的设计并定义到名为Ui_Form
的类当中。
运行并显示界面
运行以下代码:
import pyside_ui_to_code # 导入pyside_ui_to_code文件
from PySide6.QtWidgets import QApplication, QWidget
import sys
class Pyside_ui_code_Widget(QWidget):
def __init__(self, parent = None):
super().__init__(parent) # 父类对象初始化
self.ui = pyside_ui_to_code.Ui_Form() # 实例化pyside_ui_to_code中的Ui_Form类
self.ui.setupUi(self) # 调用Ui_Form中的setupUi方法,并将定义的这个Widget作为实参传递给形参Form
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Pyside_ui_code_Widget()
window.show()
sys.exit(app.exec())
可以得到如下界面:
按钮点击功能开发
应用Qt信号与槽机制,将clicked
信号与特定的槽slot
连接,完成点击功能开发。
我们可以在ui转过来的py文件中看到QMetaObject.connectSlotsByName(Form)
语句,它可在窗口上查找所有从QObject
类继承的控件,根据名称objectName
匹配控件的信号与槽函数。槽方法格式如下:
@Slot()
def on_objectName_signal_Name(self, signalParameter):
UI转换后,我们做了如下开发:
import pyside_ui_to_code # 导入pyside_ui_to_code文件
from PySide6.QtWidgets import QApplication, QWidget, QFileDialog
import sys
import os
from PySide6.QtCore import Slot, Qt
class Pyside_ui_code_Widget(QWidget):
def __init__(self, parent = None):
super().__init__(parent) # 父类对象初始化
self.ui = pyside_ui_to_code.Ui_Form() # 实例化pyside_ui_to_code中的Ui_Form类
self.ui.setupUi(self) # 调用Ui_Form中的setupUi方法,并将定义的这个Widget作为实参传递给形参Form
@Slot()
def on_pushButtonUISelect_clicked(self):
# 设置待转换的UI文件
uiPath, _ = QFileDialog.getOpenFileName(
self, # 父窗口对象
"选择你转换的UI文件", # 标题
os.curdir, # 起始目录
"UI文件 (*.ui)" # 选择类型过滤项,过滤内容在括号中
)
self.ui.textEditUI.setText(uiPath)
@Slot()
def on_pushButtonCodeSelect_clicked(self):
# 设置输出的代码文件
codePath, _ = QFileDialog.getSaveFileName(
self, # 父窗口对象
"保存文件", # 标题
os.curdir, # 起始目录
"Python文件 (*.py)" # 选择类型过滤项,过滤内容在括号中
)
self.ui.textEditCode.setText(codePath)
@Slot()
def on_pushButtonToolSelect_clicked(self):
# 设置转换工具路径
toolPath, _ = QFileDialog.getOpenFileName(
self, # 父窗口对象
"选择你的转换工具", # 标题
os.curdir, # 起始目录
"可执行文件 (*.exe)"
)
self.ui.textEditTool.setText(toolPath)
@Slot()
def on_pushButtonRun_clicked(self):
exec = self.ui.textEditTool.toPlainText()
ui = self.ui.textEditUI.toPlainText()
py = self.ui.textEditCode.toPlainText()
cmd = '"{exec}" "{ui}" -o "{py}"'.format(exec = exec, ui = ui, py = py)
# os.system(cmd) # “文件名、目录名或卷标语法不正确。” 考虑是“/”导致
os.popen(cmd) # 用管道方式执行命令,避免os.system的“文件名、目录名或卷标语法不正确。”错误
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Pyside_ui_code_Widget()
window.setWindowFlags(window.windowFlags() & ~Qt.WindowMaximizeButtonHint
| Qt.WindowCloseButtonHint) # 禁用最大化按钮
window.show()
sys.exit(app.exec())
运行该程序,则可实现界面转换为代码功能。