【问题标题】:tkinter checkbutton not displaying correct value when class imported from other file从其他文件导入类时,tkinter checkbutton不显示正确的值
【发布时间】:2020-08-25 15:52:07
【问题描述】:

我有一个主程序,它可以做一些很酷的事情,我目前正在设置一个“设置编辑器”来让用户更改一些与 GUI 相关的东西和默认值。它从文本文件中读取值,该文件被正确读取并将它们保存到字典 self.propertiesDict。一些选项是开/关开关,所以我为它们使用复选按钮。令我困惑的是以下行为:当我直接执行 settingsEditor.py(创建设置窗口的脚本)时,代码工作得很好。所有的复选按钮都设置为活动/真。但是,当我在主程序中包含我的 settingsEditor 并调用它时,它创建得很好,但所有的复选按钮都显示了错误的值:False。我在这里阅读了很多主题以找到答案,但我认为我避免了最常见的错误:

  • 我使用 tk 变量
  • tk 变量在按钮之前创建和设置
  • 变量不仅在本地范围内(前缀为 self。)

如您所见,我尝试使用 IntVar 和 BooleanVar,但都无法正常工作。还有一些奇怪的事情,当我使用 ttk.checkbuttons 时,我得到了here 描述的问题。我使用 Visual Studio 进行调试,在逐行查看过程中看不到任何差异,除了显示结果错误。我很高兴有任何建议。很抱歉没有提供完整的 MWE,如果没有人可以从这里帮助我,我会这样做。

settingsEditor.py

import tkinter as tk
from tkinter import ttk
...
class mySettingsEditor:
    def __init__(self):
        ...
    def createGUI(self):
        # Show main options on startup on/off
        self.showOptionsVar = tk.IntVar()
        self.showOptionsVar.set(str2int(self.propertiesDict['showMainOptionsExpanded']))
        print(self.showOptionsVar.get())
        self.checkBtn1 = tk.Checkbutton(Frame, text='Main Options Section', variable=self.showOptionsVar)
        self.checkBtn1.grid(column=0,row=2)

        # Show main STL section on startup on/off
        self.showMainSTLVar = tk.BooleanVar()
        self.showMainSTLVar.set(str2bool(self.propertiesDict['showMainSTLSectionExpanded']))
        print(self.showMainSTLVar.get())
        self.checkBtn2 = tk.Checkbutton(Frame, text='Main STL Section', variable=self.showMainSTLVar)
        self.checkBtn2.grid(column=0,row=3)

main.py

from settingsEditor import mySettingsEditor
...
settEditor = mySettingsEditor()

这是单独执行时它在 GUI 中的外观(左侧打印输出的终端):

这就是我在 main.py 中添加它时的结果。这些框未选中,但 .get() 告诉我这些值已正确分配给 tk 变量。

【问题讨论】:

    标签: python tkinter tkinter.checkbutton


    【解决方案1】:

    正如jasonharper 所建议的,为子窗口切换到 Toplevel() 解决了这个问题。非常感谢!

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      相关资源
      最近更新 更多