使用pyside+designer将.ui文件转化为.py文件的两种方法

本文介绍如何使用PySide将.ui文件转换为.py文件,包括PyCharm配置指南及直接加载.ui文件的方法。提供了使用pyside-uic.exe进行转换的步骤,以及通过编写Python代码来解析.ui文件并返回界面类的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、使用pyside-uic.exe将.ui文件转化为.py文件

1、进入Pycharm的设置界面
这里写图片描述

2、进入外部工具设置
这里写图片描述

3、配置designer.exe,注意program路径和working directory路径
这里写图片描述

4、配置pyUIC,注意找到pyside-uic.exe文件所在的路径和参数
这里写图片描述

当配置完成之后就可以直接在pycharm中利用designer生成.ui文件,并且使用pyUIC将.ui文件转化为.py文件。这里给出一个Pyqt的配置链接PyQt5+python3+pycharm开发环境配置,比较详细,不清楚的朋友可以学习一下

二、使用pysideuic直接载入.ui文件

我们打开.ui文件时会发现ui文件实际上是一个xml文件,我们可以写一个方法解析ui文件,并且返回该界面类及其基类,例如我们写的是一个主窗口界面继承自QMainWindow,类名为MyWindow,那么我们就可以返回QMainWindow和MyWindow,这里的代码来自PySide和PyQt加载ui文件的两种方法

# -*- coding: utf-8 -*-
from PySide import QtGui

import xml.etree.ElementTree as xml
from cStringIO import StringIO


def load_ui_file(ui_file, type='PySide'):
    if type == 'PySide':
        import pysideuic
        print pysideuic

        parsed = xml.parse(ui_file)
        widget_class = parsed.find('widget').get('class')
        form_class = parsed.find('class').text

        with open(ui_file, 'r') as f:
            o = StringIO()
            frame = {}

            pysideuic.compileUi(f, o, indent=0)
            pyc = compile(o.getvalue(), '<string>', 'exec')
            exec pyc in frame

            form_class = frame['Ui_%s' % form_class]
            base_class = getattr(QtGui, widget_class)
        return form_class, base_class

    elif type == 'PyQt4':
        import PyQt4.uic
        return PyQt4.uic.loadUiType(ui_file)


if __name__ == "__main__":
    ui_file = 'test.ui'
    load_ui_file(ui_file)

还有一种使用QUiloade可以直接动态加载ui文件的方法QUiloader,示例代码为:

class MyWidget(QWidget):
    def __init__(self, parent):
        super(QWidget, self).__init__(parent)
        loader = QUiLoader()
        file = QFile(":/forms/myform.ui")
        file.open(QFile.ReadOnly)
        myWidget = loader.load(file, self)
        file.close()

        layout = QVBoxLayout()
        layout.addWidget(myWidget)
        self.setLayout(layout)

利用with语句可以简化文件操作:

from PySide.QtGui import *
from PySide.QtUiTools import *
from PySide.QtCore import *
import sys

class UiFile:
    def __init__(self,file_name):
        self.file_name = file_name
        self.file = QFile(file_name)
    def __enter__(self):
        return self.file
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.file.close()

def Open_UiFile(filename):
    return UiFile(filename)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    loader = QUiLoader()
    with Open_UiFile('tt.ui') as file:
        file.open(QFile.ReadOnly)
        myDialog = loader.load(file)
    myDialog.button = QPushButton("test",myDialog)
    myDialog.verticalLayout.addWidget(myDialog.button)
    myDialog.show()
    sys.exit(app.exec_())
### 解决方案 当 `pyuic5` 工具用于将 `.ui` 文件换为 Python 脚本时出现问题,可以采取多种措施来解决问题并成功完成换。 #### 方法一:修正命令参数 如果遇到错误信息 “error: no such option: -m”,这表明使用的命令格式不正确。应采用如下命令结构: ```bash pyuic5 -x input.ui -o output.py ``` 该命令中的 `-x` 参数表示创建带有默认槽函数的代码[^2]。 #### 方法二:利用PyCharm内置功能 对于使用 PyCharm 的开发者来说,可以通过配置 External Tools 来简化 UI 文件Python 文件换过程。具体操作是在 Working Directory 字段输入 `$FileDir$`,这样生成后的文件会被保存至项目的根目录下。接着通过右键菜单选择对应的工具项实现自动化换流程[^3]。 #### 方法三:验证环境变量与安装包版本兼容性 有时问题可能源于系统路径设置不当或是不同版本间的冲突。确保已正确设置了 PYTHONPATH 和其他必要的环境变量,并确认所用的 PyQt 版本是最新的稳定版。此外,尝试重新安装或更新相关库也可能有助于消除潜在的问题源。 #### 方法四:检查UI文件本身是否存在语法或其他形式上的错误 某些情况下,`.ui` 文件内部可能存在导致编译器无法解析的内容。打开 Qt Designer 审查设计稿是否有异常之处;另外也可以试着新建一个简单的窗口布局作为测试样例来进行对比分析。 ```python import sys from PyQt5.QtWidgets import QApplication, QWidget if __name__ == '__main__': app = QApplication(sys.argv) w = QWidget() w.resize(250, 150) w.setWindowTitle('Simple') w.show() sys.exit(app.exec_()) ``` 上述脚本展示了如何构建最基础的应用程序实例,可用于检验基本环境是否正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值