无法使用命令-Tkinter 更改其他 Ttk Checkbutton 的状态
Can't change state of other Ttk Checkbutton using command- Tkinter
如何使一个 CheckButton 在单击任何其他 CheckButton 时被禁用和选中。
我也想禁用 chk1
设置为 Checked upon hiting chk2
as Checked 如果未选中,我希望 chk1
的状态设置为正常。
我在使用下面时遇到错误-
import tkinter as tk
from tkinter import ttk
class Root(tk.Tk):
def __init__(self):
super().__init__()
var1 = tk.IntVar()
chk1 = ttk.Checkbutton(self, text = 'Class', variable = var1)
#chk1.state(['selected'])
chk1.pack(side = 'left')
var2 = tk.IntVar()
chk2 = ttk.Checkbutton(self, text = 'Section', variable = var2,
command = lambda: self.chk(chk1, var2))
#chk2.state(['selected'])
chk2.pack(side = 'left')
def chk(self, obj, self_val):
if self_val.get() == 1: #changed from 0 to 1
obj.state['selected']
obj.configure(state = 'disabled')
else:
obj.configure(state = 'normal')
if __name__ == '__main__':
Root().mainloop()
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Sagar\Anaconda3\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "d:\chkbtn.py", line 18, in <lambda>
command = lambda: self.chk(chk1, var2))
File "d:\chkbtn.py", line 24, in chk
obj.state['selected']
TypeError: 'method' object is not subscriptable
我认为经过一番混淆后,您需要向 lambda 和方法中添加第三个变量。
为了设置状态和更新变量。
试试下面的方法,如果有帮助请告诉我:
import tkinter as tk
from tkinter import ttk
class Root(tk.Tk):
def __init__(self):
super().__init__()
var1 = tk.IntVar(self)
var2 = tk.IntVar(self)
chk1 = ttk.Checkbutton(self, text='chk1', variable=var1)
chk2 = ttk.Checkbutton(self, text='chk2', variable=var2, command=lambda: self.chk(var1, chk1, var2))
chk1.pack(side='left')
chk2.pack(side='left')
def chk(self, var1, chk1, chk2):
if chk2.get() == 1:
var1.set(1) # need to set the value of var1 to update chk1
chk1.configure(state='disabled')
else:
var1.set(0)
chk1.configure(state='normal')
if __name__ == '__main__':
Root().mainloop()
这是一个使用 class 属性而不是 lambda 的示例。
import tkinter as tk
from tkinter import ttk
class Root(tk.Tk):
def __init__(self):
super().__init__()
self.var1 = tk.IntVar(self)
self.var2 = tk.IntVar(self)
self.chk1 = ttk.Checkbutton(self, text='chk1', variable=self.var1)
chk2 = ttk.Checkbutton(self, text='chk2', variable=self.var2, command=self.chk)
self.chk1.pack(side='left')
chk2.pack(side='left')
def chk(self):
if self.var2.get() == 1:
self.var1.set(1) # need to set the value of var1 to update chk1
self.chk1.configure(state='disabled')
else:
self.var1.set(0)
self.chk1.configure(state='normal')
if __name__ == '__main__':
Root().mainloop()
如何使一个 CheckButton 在单击任何其他 CheckButton 时被禁用和选中。
我也想禁用 chk1
设置为 Checked upon hiting chk2
as Checked 如果未选中,我希望 chk1
的状态设置为正常。
我在使用下面时遇到错误-
import tkinter as tk
from tkinter import ttk
class Root(tk.Tk):
def __init__(self):
super().__init__()
var1 = tk.IntVar()
chk1 = ttk.Checkbutton(self, text = 'Class', variable = var1)
#chk1.state(['selected'])
chk1.pack(side = 'left')
var2 = tk.IntVar()
chk2 = ttk.Checkbutton(self, text = 'Section', variable = var2,
command = lambda: self.chk(chk1, var2))
#chk2.state(['selected'])
chk2.pack(side = 'left')
def chk(self, obj, self_val):
if self_val.get() == 1: #changed from 0 to 1
obj.state['selected']
obj.configure(state = 'disabled')
else:
obj.configure(state = 'normal')
if __name__ == '__main__':
Root().mainloop()
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Sagar\Anaconda3\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "d:\chkbtn.py", line 18, in <lambda>
command = lambda: self.chk(chk1, var2))
File "d:\chkbtn.py", line 24, in chk
obj.state['selected']
TypeError: 'method' object is not subscriptable
我认为经过一番混淆后,您需要向 lambda 和方法中添加第三个变量。
为了设置状态和更新变量。
试试下面的方法,如果有帮助请告诉我:
import tkinter as tk
from tkinter import ttk
class Root(tk.Tk):
def __init__(self):
super().__init__()
var1 = tk.IntVar(self)
var2 = tk.IntVar(self)
chk1 = ttk.Checkbutton(self, text='chk1', variable=var1)
chk2 = ttk.Checkbutton(self, text='chk2', variable=var2, command=lambda: self.chk(var1, chk1, var2))
chk1.pack(side='left')
chk2.pack(side='left')
def chk(self, var1, chk1, chk2):
if chk2.get() == 1:
var1.set(1) # need to set the value of var1 to update chk1
chk1.configure(state='disabled')
else:
var1.set(0)
chk1.configure(state='normal')
if __name__ == '__main__':
Root().mainloop()
这是一个使用 class 属性而不是 lambda 的示例。
import tkinter as tk
from tkinter import ttk
class Root(tk.Tk):
def __init__(self):
super().__init__()
self.var1 = tk.IntVar(self)
self.var2 = tk.IntVar(self)
self.chk1 = ttk.Checkbutton(self, text='chk1', variable=self.var1)
chk2 = ttk.Checkbutton(self, text='chk2', variable=self.var2, command=self.chk)
self.chk1.pack(side='left')
chk2.pack(side='left')
def chk(self):
if self.var2.get() == 1:
self.var1.set(1) # need to set the value of var1 to update chk1
self.chk1.configure(state='disabled')
else:
self.var1.set(0)
self.chk1.configure(state='normal')
if __name__ == '__main__':
Root().mainloop()