微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从其他文件导入类时,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()可以解决此问题。非常感谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。