【问题标题】:Python 3.2 Cx_Freeze won't compile whole tkinterPython 3.2 Cx_Freeze 不会编译整个 tkinter
【发布时间】:2014-04-28 14:28:24
【问题描述】:

我制作了这个小计算器,我尝试使用 cx_freeze 进行编译。它计算一些东西并在消息框中给你答案。当我从 IDLE 运行它时一切正常,但是当我从 .exe 运行它时,它会打开使用 Tkinter 创建的 GUI,但是如果我按下我的计算按钮,它应该会弹出消息框,它会在 dos shell 中给我以下错误:

'Tkinter 回调异常 回溯(最近一次通话最后): 调用中的文件“C:\Python32\lib\tkinter__init__.py”,第 1399 行 返回 self.func(*args) energyKinetic 中的文件“calculator1.pyw”,第 46 行 NameError: 全局名称'messagebox'未定义'

我使用以下“setup.py”:

from cx_Freeze import setup, Executable


setup(
    name = 'Kinetic Energy Calculator',
    version = '0.1',
    description = 'Calculate',
    executables = [Executable('calculator1.pyw')],
)

并使用 'C:\Python32>python setup.py build' 从 cmd 运行它。

计算器本身的代码只是简单的 Tkinter GUI,带有按钮、标签、条目和消息框,所以我看不出在这里发布它的理由,除非当然有人会觉得我需要这样做. 那么,有什么重要的东西我没有放入 setup.py 以使其正确编译吗?

【问题讨论】:

    标签: python python-3.x compilation tkinter cx-freeze


    【解决方案1】:

    您必须使用 tkinter 窗口创建自定义消息框,因为在尝试启动程序时,除了按 F5 按钮之外,实际的消息框不知何故不存在。换句话说,你无法解决它。您必须创建新窗口。

    【讨论】:

    • 所以,我将不得不让我的主窗口打开另一个窗口 - 类似的东西?换句话说,我将不使用messageboxe,而是使用看起来像messagebox 的新窗口?顺便说一句,感谢 Win32GUI 的事情,也帮了我很多:)
    • 是的,让窗口看起来像消息框,但不要创建“新”窗口,而应该创建主窗口的“顶层”。
    【解决方案2】:

    你也忘了添加 base 选项:

        setup(
            name = 'Kinetic Energy Calculator',
            version = '0.1',
            description = 'Calculate',
            executables = [Executable('calculator1.pyw', base="Win32GUI")]
            )
    

    虽然它仍然无法工作,但现在可以识别 tkinter。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多