我对Qt、Python和它们的组合非常陌生。我目前正在用Python语言编写一个QGIS插件(我使用Python2.1 (Qt Designer 4.7)生成了一个.ui文件,现在正在尝试将它用于一个用QtCreator 2.5编写的Quantum GIS插件(并在Quantum GIS Python2.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,in __ init __ self.ui = loadUi(os.path.join(code_dir,"Ui_myfile.ui"),self)
文件返回行112,在loadUi "C:\PROGRA~1\QUANTU~1\apps\Python25\lib\site-packages\PyQt4\uic__init__.py",DynamicUILoader().loadUi(uifile,baseinstance)中。
文件名返回第21行,在loadUi "C:\PROGRA~1\QUANTU~1\apps\Python25\lib\site-packages\PyQt4\uic\Loader\loader.py",self.parse(文件名)中
解析执行元(Elem)中的文件"C:\PROGRA~1\QUANTU~1\apps\Python25\lib\site-packages\PyQt4\uic\uiparser.py",行768
File "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处理程序中(自身,子级)
文件小部件第233行,在createWidget topwidget.setCentralWidget( "C:\PROGRA~1\QUANTU~1\apps\Python25\lib\site-packages\PyQt4\uic\uiparser.py",)SystemError中:错误返回,没有设置异常
发布于 2011-03-11 21:16:47
我不确定是什么导致了这个确切的问题,但是直接使用.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和Windows7上运行,而且我在用pyInstaller编译之前生成python模块,所以它可以是一个实时的节省。
https://stackoverflow.com/questions/5248543
复制相似问题