【问题标题】:wxformbuilder python generated code throws NameErrorwxformbuilder python生成的代码抛出NameError
【发布时间】:2011-12-22 01:25:06
【问题描述】:

不确定背景是否相关,但我会将其包含在可能发生的情况中

我从 wxglade 搬来,所以我从 wxglade 生成了一个 XRC 并导入到 wxformbuilder 中

我有一个网格,我将其子类化以添加一些功能,在 wxformbuilder 中它正确显示了网格并且子类的属性也正确(mygrid.MyGrid)

但是生成的代码当然不会导入 mygrid,所以运行它时会抛出:

NameError: global name 'mygrid' is not defined

这是一个错误还是我做错了什么?有什么解决方法吗?

【问题讨论】:

    标签: python wxpython wxformbuilder


    【解决方案1】:

    您的解决方法帮助了我几个月。

    直到今天,当我终于忽略了 header 字段帮助时,它声明仅适用于 C++,并在其中指出了我的子类所在的模块名称。现在,生成的类正确地导入了我的子类定义。

    header 字段位于 wxFormBuilder GUI 中 subclass 字段的正下方。如果您想手动编辑 wxFormBuilder 项目,请将<property name="subclass">mygrid; </property> 替换为<property name="subclass">mygrid; mygrid</property>。重新生成后,您将在 gui.py 中有一个 from mygrid import mygrid 行。

    【讨论】:

      【解决方案2】:

      好的,找到了一个看起来可行的丑陋解决方法

      基本上我手动添加对模块全局字典的引用:
      在示例中,代码在文件 gui.py 中生成,我的类在文件 mygrid.py 中

      import mygrid
      import gui
      import sys
      setattr(sys.modules["gui"], "mygrid", mygrid)
      

      【讨论】:

        猜你喜欢
        • 2012-01-05
        • 2015-10-17
        • 1970-01-01
        • 2013-10-18
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 2014-02-02
        • 1970-01-01
        相关资源
        最近更新 更多