0

我对 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"), 自我)

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

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

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

文件“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 处理程序(self,child)中

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

4

1 回答 1

0

我不确定是什么导致了这个精确的问题,但是直接使用 .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 模块,因此它可以节省时间。

于 2011-03-11T13:16:47.247 回答