【问题标题】:System Error when running PyQt4's loadUi()运行 PyQt4 的 loadUi() 时出现系统错误
【发布时间】:2011-07-12 00:52:57
【问题描述】:

我对 Qt、Python 及其组合还是很陌生。我目前正在用python编写一个QGIS插件(我使用QtCreator 2.1(Qt Designer 4.7)来生成一个.ui文件,现在我正在尝试将它用于用Python 2.5编写的Quantum GIS插件(并在Quantum中运行) GIS Python 2.5 控制台))。 当程序运行 loadUi() 函数时,我在动态加载 ui 文件时遇到了麻烦。让我失望的是错误发生在我的脚本之外。这是否意味着,我传递了一些错误的东西?错误来自哪里?关于可能出错的任何提示?

code_dir = os.path.dirname(os.path.abspath(__file__)) 
self.ui = loadUi(os.path.join(code_dir, "Ui_myfile.ui"), self)

这是我得到的错误代码(减去第一段):

文件“C:/Dokumente und Einstellungen/name.name/.qgis/python/plugins\myfile\myfile_gui.py”,第 42 行,在 __ init __ self.ui = loadUi(os.path.join(code_dir, "Ui_myfile.ui"), self)

文件“C:\PROGRA~1\QUANTU~1\apps\Python25\lib\site-packages\PyQt4\uic__init__.py”,第 112 行,在 loadUi 中 return DynamicUILoader().loadUi(uifile, baseinstance)

文件“C:\PROGRA~1\QUANTU~1\apps\Python25\lib\site-packages\PyQt4\uic\Loader\loader.py”,第 21 行,在 loadUi 返回 self.parse(文件名)

文件“C:\PROGRA~1\QUANTU~1\apps\Python25\lib\site-packages\PyQt4\uic\uiparser.py”,第 768 行,解析中 演员(元素)

文件“C:\PROGRA~1\QUANTU~1\apps\Python25\lib\site-packages\PyQt4\uic\uiparser.py”,第 616 行,在 createUserInterface self.traverseWidgetTree(elem)

文件“C:\PROGRA~1\QUANTU~1\apps\Python25\lib\site-packages\PyQt4\uic\uiparser.py”,第 594 行,在 traverseWidgetTree 处理程序(自己,孩子)

文件“C:\PROGRA~1\QUANTU~1\apps\Python25\lib\site-packages\PyQt4\uic\uiparser.py”,第 233 行,在 createWidget topwidget.setCentralWidget(小部件) SystemError:错误返回没有异常设置

【问题讨论】:

    标签: pyqt4 loadui


    【解决方案1】:

    我不确定是什么导致了这个精确的问题,但是直接使用 .ui 文件对我来说从来都不是很好 - 相反,我使用 pyuic4 将它们编译为 python 代码(如果你的 PyQt4 站点应该在你的路径中 -包配置正确。语法如下:-

    pyuic4 -o <python output> -x <uic input>

    -: 资源文件可以类似地转换为(不是那么人类可读的)python 使用:-

    pyrrc4 -o <python output> <qrc input>

    -: 然后您可以将该 python 文件作为模块导入,更不用说阅读其代码可以为您提供有关如何在运行时调整布局的线索。

    这样做的另一个好处是您不必在运行时解析 xml - 导入 python 模块要快得多,而且您不太可能像运行脚本那样频繁地更改 ui。如果您确实遇到这种情况,您可以在脚本/应用程序之前创建一个批处理来运行它们。

    这是我与 pyInstaller 结合使用的方法,用于部署无需修改即可在 XP、Vista 和 Windows 7 上“运行”的脚本,并且我在使用 pyInstaller 编译之前生成了 python 模块,因此它可以是真正的节省时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 2013-02-26
      • 2019-05-07
      • 1970-01-01
      相关资源
      最近更新 更多