wxformbuilder 生成的 Python 代码抛出 NameError
我不确定背景信息是否重要,但我还是把它写上来以防万一。
我之前在用wxglade,现在我从wxglade生成了一个XRC文件,然后把它导入到wxformbuilder里。
我有一个网格(grid),我对它进行了子类化,以添加一些功能。在wxformbuilder中,这个网格显示得很正确,子类的属性也没问题(是mygrid.MyGrid)。
但是生成的代码显然没有正确导入mygrid,所以当我运行它的时候就报错了:
NameError: global name 'mygrid' is not defined
这是个bug,还是我哪里做错了?有没有什么解决办法?
2 个回答
2
你的解决办法让我用了几个月,真的很有帮助。
直到今天,我终于忽略了header
字段的提示,上面写着仅限C++,并在里面指明了我放置子类的模块名称。现在,生成的类可以正确导入我的子类定义了。
header
字段就在wxFormBuilder界面中subclass
字段的正下方。如果你想手动编辑wxFormBuilder项目,可以把<property name="subclass">mygrid; </property>
替换成<property name="subclass">mygrid; mygrid</property>
。重新生成后,你会在gui.py中看到一行from mygrid import mygrid
。
1
好的,我找到了一种看起来有效但不太优雅的解决办法。
基本上,我手动将模块的全局字典添加了引用:
在这个例子中,代码是在文件 gui.py 中生成的,而我的类则在文件 mygrid.py 中。
import mygrid
import gui
import sys
setattr(sys.modules["gui"], "mygrid", mygrid)