python和ui设计,PySide2相当于PyQt5的loadUiType(),用于在UI设计中动态混合

以下是对上述较早的答案中提出的解决方案PySide2和python3.6+的改编:from PySide2 import QtWidgets

from pyside2uic import compileUi

from xml.etree import ElementTree

from io import StringIO

def loadUiType(design):

"""

PySide2 equivalent of PyQt5's `uic.loadUiType()` function.

Compiles the given `.ui` design file in-memory and executes the

resulting Python code. Returns form and base class.

"""

parsed_xml = ElementTree.parse(design)

widget_class = parsed_xml.find('widget').get('class')

form_class = parsed_xml.find('class').text

with open(design) as input:

output = StringIO()

compileUi(input, output, indent=0)

source_code = output.getvalue()

syntax_tree = compile(source_code, filename='', mode='exec')

scope = {}

exec(syntax_tree, scope)

form_class = scope[f'Ui_{form_class}']

base_class = eval(f'QtWidgets.{widget_class}')

return (form_class, base_class)

如果与主Python模块一起另存为uic.py,则只有import语句需要更改,以便将问题中的示例从PySide2迁移到PyQt5:

^{pr2}$

在Windows10(通过pip install pyside2)和ManjaroLinux18.0.4(通过pacman-packagespyside2和pyside2-tools)上用python3.7.3和PySide2进行了测试。在

(如果新潮的f-string虽然很漂亮,却被可怕的落后的前辈随意取代,那么这个解决方案也应该适用于旧版的python3版本。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值