如何使用 PySide 将 .ui 文件加载到 python 类中?

问题描述 投票:0回答:2

我使用 PyQt 已经有一段时间了,并且在我使用它的整个过程中,有一个非常一致的编程模式。

  1. 使用 Qt Designer 创建 .ui 文件。
  2. 创建一个与您在 .ui 文件中创建的小部件类型相同的 Python 类。
  3. 初始化python类时,使用uic将.ui文件动态加载到类上。

有没有办法在 PySide 中做类似的事情?我已经阅读了文档和示例,我能找到的最接近的东西是一个计算器示例,它将 .ui 文件预先渲染为 python 代码,这是在 PyQt 中执行此操作的超级旧方法(为什么将其烘焙为 python什么时候你可以解析 ui?)

python qt user-interface pyqt pyside
2个回答
28
投票

我正在用 PySide 做这件事。 :)

你使用这个https://gist.github.com/cpbotha/1b42a20c8f3eb9bb7cb8(Sebastian Wiesner 的原创位于https://github.com/lunaryorn/snippets/blob/master/qt4/designer/pyside_dynamic.py 但已消失) - 它覆盖 PySide.QtUiTools.QUiLoader 并提供新的

loadUi()
方法,以便您可以执行此操作:

class MyMainWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        loadUi('mainwindow.ui', self)

当您实例化 MyMainWindow 时,它将具有您使用 Qt Designer 设计的 UI。

如果您还需要使用自定义小部件(Qt Designer 中的“升级到”),请参阅此答案:https://stackoverflow.com/a/14877624/532513


0
投票

将 ui_file = 'AOI_GUI.ui' 和 output_py_file = 'AOI_GUI.py' 更改为您的文件名。

from PySide6.QtCore import QFile, QTextStream
from PySide6.QtWidgets import QApplication
from PySide6.QtUiTools import QUiLoader
import sys

# Function to convert UI file to Python
def convert_ui_to_py(ui_file, output_py_file):
    app = QApplication.instance()
    if app is None:
        app = QApplication(sys.argv)
        
    loader = QUiLoader()
    ui_file = QFile(ui_file)
    ui_file.open(QFile.ReadOnly)
    ui_content = loader.load(ui_file)
    ui_file.close()
    
    # Convert QMainWindow object to string
    ui_str = repr(ui_content)
    
    with open(output_py_file, 'w') as py_file:
        py_file.write(ui_str)
    print(f"UI file '{ui_file.fileName()}' converted to Python file '{output_py_file}'")

# Entry point of the script
def main():
    # Specify the path to the UI file and the desired output Python file
    ui_file = 'AOI_GUI.ui'
    output_py_file = 'AOI_GUI.py'
    
    # Convert the UI file to Python
    convert_ui_to_py(ui_file, output_py_file)

if __name__ == '__main__':
    main()
© www.soinside.com 2019 - 2024. All rights reserved.