【问题标题】:Loading QtDesigner's .ui files in PySide在 PySide 中加载 QtDesigner 的 .ui 文件
【发布时间】:2011-10-31 22:33:24
【问题描述】:

我正在寻找一个简单示例,说明如何将 QtDesigner 生成的 .ui 文件直接加载到 Python 应用程序中。

我只是想避免使用 pyuic4。

【问题讨论】:

    标签: python qt pyside


    【解决方案1】:

    PySide 与 PyQt 不同,它实现了 QUiLoader 类来直接读取 .ui 文件。 从链接的文档中,

    loader = QUiLoader()
    file = QFile(":/forms/myform.ui")
    file.open(QFile.ReadOnly)
    myWidget = loader.load(file, self)
    file.close()
    

    【讨论】:

    • 只是为了帮助新手:QUiLoader 来自PySide.QtUiTools.QUiLoader
    • 我得到的只是:QPixmap: Must construct a QApplication before a QPaintDevice Aborted (core dumped)
    • @Lucio 此答案中的代码 sn-p 不能单独使用。按照 BarryPye 的回答获取完整示例。
    【解决方案2】:

    对于 PySide 和 .ui 文件的完整新手,这是一个完整的示例:

    from PySide import QtCore, QtGui, QtUiTools
    
    
    def loadUiWidget(uifilename, parent=None):
        loader = QtUiTools.QUiLoader()
        uifile = QtCore.QFile(uifilename)
        uifile.open(QtCore.QFile.ReadOnly)
        ui = loader.load(uifile, parent)
        uifile.close()
        return ui
    
    
    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        MainWindow = loadUiWidget(":/forms/myform.ui")
        MainWindow.show()
        sys.exit(app.exec_())
    

    【讨论】:

    • 试试这个@Necronomicron
    • 以这种方式加载 UI 后如何访问 UI 小部件?
    • 找到答案herewindow = loader.load('filename.ui', parent); my_widget = window.my_widget_name
    【解决方案3】:

    另一个变体,基于更短的加载指令,在https://askubuntu.com/questions/140740/should-i-use-pyqt-or-pyside-for-a-new-qt-project#comment248297_141641 上找到。 (基本上,您可以避免所有这些文件的打开和关闭。)

    import sys
    from PySide import QtUiTools
    from PySide.QtGui import *
    
    app = QApplication(sys.argv)
    window = QtUiTools.QUiLoader().load("filename.ui")
    window.show()
    sys.exit(app.exec_())
    

    注意事项:

    • filename.ui 应与您的 .py 文件位于同一文件夹中。
    • 您可能想要使用if __name__ == "__main__":,如BarryPye's answer 中所述

    【讨论】:

    • 这个实际上适用于 PySide2。只需添加from PySide2.QtWidgets import QApplication
    【解决方案4】:

    这是 PySide6 和 Windows 的一些示例。 (对于 linux,您需要使用 /,而不是 \\

    from PySide6.QtUiTools import QUiLoader
    from PySide6.QtCore import QFile
    from PySide6.QtWidgets import QApplication
    import sys
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        loader = QUiLoader()
        file = QFile("gui.ui")
        file.open(QFile.ReadOnly)
        ui = loader.load(file)
        file.close()
        ui.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-20
      • 2013-01-31
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 2017-10-16
      相关资源
      最近更新 更多