【问题标题】:PyInstaller Exe behaves differently to scriptPyInstaller Exe 的行为与脚本不同
【发布时间】:2022-10-23 00:43:41
【问题描述】:

好吧,我正在使用 customtkinter 从辅助窗口获取用户输入。

从 MSCode 运行脚本时,一切正常。

  • 用户输入CTkEntry 小部件。
  • textvariable 正确赋值。
  • 此值可在别处访问。

但是,当我使用 pyinstaller 创建相同脚本的 .exe 时,textvariable 只是停止将其值分配给 textvariable

谁能指出我在哪里/什么可能导致这样的错误?
是不是这些模组不兼容?

作为旁注:我在与主窗口类似的庄园中使用CTkEntry,并且没有使用相同语法的此类问题。

我正在使用 auto-py-to-exe 的设置:

  • 一个目录
  • 基于控制台(用于调试)
  • 找到 customTkinter lib 文件夹
  • --hiddenimport win32timezone(否则抛出错误)

窗口看起来像:

self.entryString = tkinter.StringVar()
entryWidget = customtkinter.CTkEntry(master=self.window, textvariable=self.entryString)
entryWidget.pack()
customtkinter.CTkButton(master=self.window, text="Done", command=self.dismissWindow).pack()

稍后使用:

self.entryString.get()

【问题讨论】:

  • 不建议在同一行调用几何管理器,因为它们都返回 None,您应该将它们移动到单独的行。我看到你有textvariabel=self.TempNew,我希望它是StringVar 的一个实例,因为你正在调用self.entrystring.get(),为什么它设置为self.TempNew
  • @Rory Ahh 我没有在问题中注意到这一点。我正在将其更改为不同的变量,以查看它是否不喜欢“全局”变量(self.var = __ vs var = __) - 我已经修复了问题中的代码。在那一点上,将.pack() 更改为下面的行并没有解决错误,但我知道这是一个更好的做法
  • @Alexander 在我尝试创建一个最小的可重现示例时,我无法复制相同的错误,尽管几乎逐字逐句地复制脚本。不过,正如我在下面回答的那样,我确实在此过程中找到了解决方案
  • @Shock 好消息

标签: python tkinter pyinstaller tkinter-entry customtkinter


【解决方案1】:

好吧,关闭我确实找到并解决了我的问题的问题。

我有一个根窗口main。在main 内部,我有一个按钮可以打开另一个窗口form 供用户交互。 form 本身也会打开新窗口。

使用 form 创建的窗口是 TkTopLevel ,它们应该是(我的印象是应该避免多个根窗口)

我没有意识到form 是一个根窗口,而不是TkTopLevel。 所以当我回到main 时,form 中的textvariables 并没有更新它们的值。我不知道是什么具体来说Tk 库中导致此错误,但在将form 更改为TkTopLevel 后,交互按预期工作。

【讨论】:

    猜你喜欢
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2019-08-13
    • 2023-03-15
    • 2019-12-31
    • 1970-01-01
    • 2019-12-22
    相关资源
    最近更新 更多