运行PyQt4的loadUi()时出现系统错误

时间:2011-03-09 16:07:18

标签: pyqt4 loadui

我对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中  返回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行,解析  演员(ELEM)

文件 “C:\ PROGRA〜1个\ QUANTU〜1个\ APPS \ Python25 \ lib中\站点包\ PyQt4的\ UIC \ uiparser.py”,线616,在createUserInterface  self.traverseWidgetTree(ELEM)

文件 “C:\ PROGRA〜1个\ QUANTU〜1个\ APPS \ Python25 \ lib中\站点包\ PyQt4的\ UIC \ uiparser.py”,线路594,在traverseWidgetTree  处理程序(自我,孩子)

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

1 个答案:

答案 0 :(得分: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模块,因此它可以是真实的节省时间。