被告知使用tkinter Checkbutton的选择方法没用如果存储的设置为真,如何解决?

问题描述

我正在尝试为我的应用制作GUI,但是在尝试进行顶级设置时遇到了障碍。此顶层具有标签和设置按钮,它们以相同的状态开始,其各自的设置从最后的设置/认值开始存储。

这是我目前遇到的例外情况:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files\python39\lib\tkinter\__init__.py",line 1885,in __call__
    return self.func(*args)
  File "KMIU 4\kmiu_dv7.pyw",line 38,in settings
    sett.display(main)
  File "KMIU 4\bk\settings.py",line 54,in __init__
    self.windowsettings(tab2)
  File "KMIU 4\bk\settings.py",line 23,in windowsettings
    if settings['Fullscreen'].get(): fs_butt.select()
AttributeError: 'Checkbutton' object has no attribute 'select'

下面是引起问题的代码

def windowsettings(self,tab):
        global settings
        text = Label(tab,text ="sample text")
        text.grid(columnspan = 2)
        fs_butt = Checkbutton(
            tab,text="Fullscreen",command=lambda: settings['Fullscreen'].set(not settings['Fullscreen'].get()))
        print(settings)
        fs_butt.grid(row=1)
        if settings['Fullscreen'].get(): fs_butt.select()

解决方法

对于我来说,在使用tk.Checkbutton的代码中,select()可以正常工作,并且我看到其他人也遇到了同样的问题,不确定是什么原因造成的(也许您使用ttk.Checkbutton),但是这是一种解决方法:

  1. 首先为您的复选框分配一个BooleanVar()
var = BooleanVar()
....
fs_butt = Checkbutton(tab,variable=var,......) #same for ttk.Checkbutton(..) too
  1. 现在将变量的值设置为True进行选择,并选择False取消选择:
if settings['Fullscreen'].get():
    var.set(True)

或者您正在使用的ttk.Checkbutton没有select()deselect()