从其他文件导入类时,tkinter检查按钮未显示正确的值

问题描述

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

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

如您所见,我尝试使用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()

这是当单独执行时的样子(在终端,打印输出在左侧):

Works fine!

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

Ehm,well,no.

解决方法

根据jasonharper的建议,将子窗口切换到Toplevel()可以解决此问题。非常感谢!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...