基于Qt Designer和pyuic开发UI界面的方法

1、  打开Qt Designer选择一个模板


2、按照以下步骤建立窗体界面(下面步骤从《Python Qt GUI快速编程》的7.1节摘录)

  

  

3、  Qt Designer生成的xxx.ui文件生成Python代码

   cmd中打开xxx.ui所在路径例如:cd C:/work

         然后输入pyuic5 -o xxx.py xxx.ui 回车.其中,

        -o 后的参数为输出文件的名称 

        -o 后第二个参数即为生成的ui文件的名称


        如果建立好了PyCharm的开发环境也可以通过右键选择xxx.ui文件

       然后选择扩展工具,PyUIC直接生成xxx.py

  

  

4、  使用上一步生成的xxx.py

  这里我自动生成的代码如下:

  
  

  在使用Qt Designer创建用户界面时,利用多重继承的方法会创建一个子类,

这样就可以把打算赋予用户界面行为的代码放到这里。这样就把界面设计和个

人的具体行为逻辑分离,是一种很好的解耦方法。因此新建一个my_test.py文

件,继承上面负责界面的test.py文件。my_test.py文件的内容如下:

 

 

  我们先看看导入的模块:

 

  第一个导入的是要用在代码中的常规表达式模块

  import test导入了负责界面的test模块

  后面是常规的Qt模块

 

  现在看一下这个子类:

  

  多重继承的第一个类是QMainWindow类,因为界面用了MainWindow模板,

  如果界面用的QWidget,那第一个就要继承QWidget。然后第二个要继承

  的是test模块中的Ui_MainWindow。

 

  关注一下初始化函数的super调用,这个是调用父类的初始化方法

  

  然后就是调用setupUi这个函数(《Python Qt GUI快速编程》中的说明摘录如下)

  

  

  初始化函数最后调用我们自己定义的方法,updateUi()用来初始化一些默认状态。

  

  即使用上一步生成的xxx.py一般要经过下面的步骤:

  1、  另外新建一个py文件;

  2、  导入xxx.py和用到的模块;

  3、  新建一个子类,用多重继承的方式继承xxx.py中的类;

  4、  这个子类的初始化函数中调用super(xxx,xxx)__init__(parent)调用父类的初始化函数

  5、  这个子类的初始化函数中调用setupUi()建立Ui和启动信号槽的自动连接机制

  6、  这个子类的初始化函数中调用updateUi()实现自己的初始化代码

  7、  编写updateUi()函数

  8、  编写处理信号的槽函数

  9、  编写其他函数

    

  我们下面再看看setupUi()这个函数支持的信号槽机制在代码上是怎么实现的。

由于初始化函数中调用了setupUi(),定义成“on_xxx控件_xxx信号”的函数会

自动连接到对应的信号上,如下面的on_findLineEdit_textEdited(self,text)函

数,自动连接到findLineEdit控件的textEdited信号上。

  

我们可以看到@pyqtSlot()修饰符,使用修饰符的目的是为了区分各个具有相同名字

但是不同参数的信号。如下图@pyqtSlot后面是可以跟不同参数的。

  


5、  Mian文件代码编写

  

  Importsys 是因为用到了sys.argv参数

  app= QApplication(sys.argv)

  

  ui= myui(text)

  生成ui对象

  ui.show()

 

  最后调用

  app.exec_()

 

  则Mian文件代码主要包含:

  1、  app = QApplication(sys.argv)

  2、  生产UI对象

  3、  调用show()方法

  4、  调用app.exec_()进入消息循环



6、例子工程见下面github链接

  代码运行环境PyQt5 UI code generator 5.9.2

  Python 3.6

     https://github.com/philipyou/PyQt_QtDesigner.git


### 如何使用 QtDesigner 设计 UI 并通过 pyuic 转换为 Python 文件 #### 使用 QtDesigner 创建 UI 文件 QtDesigner 是一个用于设计图形用户界面 (GUI) 的工具。它允许开发者通过拖放组件来构建应用程序的界面布局。完成设计后,会生成一个 `.ui` 文件。 在启动 QtDesigner 后,可以选择创建一个新的表单并定义窗口结构控件位置[^3]。保存后的文件将以 `.ui` 格式存储,这是 XML 格式的描述文件,表示 GUI 布局。 --- #### 安装 PyQt 或 PySide 及其相关工具 为了将 `.ui` 文件转换为 Python 代码,需要安装 `PyQt5` 或 `PySide2` 库以及对应的命令行工具 `pyuic5` 或 `pyside2-uic`。可以通过以下方式安装: ```bash pip install pyqt5 ``` 或者如果使用 PySide2,则运行: ```bash pip install pyside2 ``` 上述命令会自动安装所需的依赖项,包括 `pyuic5` 工具(对于 PyQt5 用户)或类似的转换工具。 --- #### 使用 pyuic5 将 .ui 文件转换为 Python 文件 一旦完成了 `.ui` 文件的设计,就可以利用 `pyuic5` 来将其转换为等效的 Python 代码。执行如下命令即可实现这一过程: ```bash pyuic5 -x your_ui_file.ui -o output_python_file.py ``` 其中: - `-x`: 表示生成可直接运行的脚本。 - `-o`: 指定输出的目标 Python 文件名。 这一步完成后,`.ui` 文件会被解析并转化为一组基于 PyQt 的类实例化语句其他必要的初始化逻辑[^1]。 --- #### 配置 PyCharm 自动调用 pyuic5 为了让开发更加高效,在 IDE 中集成外部工具是一个不错的选择。以下是具体操作方法: 1. **进入设置页面** 打开 PyCharm 设置菜单 (`File -> Settings`),导航到 `Tools -> External Tools`[^2]。 2. **新增自定义工具** 点击加号按钮添加新工具,并填写以下字段: - **Name**: 输入工具名称,例如 “Convert UI to PY”。 - **Program**: 指向 `pyuic5.exe` 的路径(通常位于 Python Scripts 目录下)。 - **Arguments**: 提供参数模板 `$FilePath$ -o $FileNameWithoutExtension$.py`。 - **Working Directory**: 设置工作目录为当前项目根路径 `%ProjectFileDir%`。 3. **测试配置有效性** 返回编辑器视图右键点击任意 `.ui` 文件,选择刚创建好的外接程序选项验证功能是否正常运作。 --- #### 示例代码展示 假设有一个名为 `mainwindow.ui` 的文件,经过转换之后得到的结果可能类似于下面这段代码片段所示的内容之一部分: ```python from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") # 更多部件及其属性... self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Main Window")) ``` 以上即是从原始 `.ui` 数据映射而来的完整对象模型声明。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值