我试图跟踪OptionMenu小部件的选择,以便不同的选项运行不同的函数。但是,我经常遇到以下错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "-", line 1705, in __call__
return self.func(*args)
File "-", line 149, in callback
self.bookingCanvas(optVar)
File "-", line 152, in bookingCanvas
perfDate = optVar.get()
AttributeError: 'str' object has no attribute 'get'以下是相关代码:
optVar = StringVar(self.root)
optVar.trace('r', callback=self.callback)
optVar.set("06/10/20") # default value
optMenu_Label = Label(self.root, text='Select a performance date:',bg='gray15', fg='yellow', relief=GROOVE)
optMenu_Label.pack(side=TOP, anchor=NW, padx=15, pady=15)
optMenu = OptionMenu(self.root, optVar, '04/10/20','5/10/20','6/10/20')
optMenu.pack(side=TOP,anchor=NW, padx=35, pady=3)上面.trace()的回调:
def callback(self, optVar, *args):
print("SOMETHING HAS CHANGED")
self.bookingCanvas(optVar)错误区域(我假设):
def bookingCanvas(self, optVar):
perfDate = optVar.get()
print("This is a Date >>>",perfDate)
print("did we get here?")发布于 2020-01-31 19:52:20
来自跟踪的回调给出了变量的名称,而不是对变量对象的引用。名称是一个字符串,这就是为什么您要获得错误AttributeError: 'str' object has no attribute 'get'。
使用这个名称,您可以使用公共小部件方法getvar来获取存储在变量中的值。
在callback的定义中,您可以获得该值并将其传递给您的函数,如下所示(假设在本例中,您有一个名为‘root’的全局变量,它表示根小部件)
def callback(self, optVar_name, *args):
print("SOMETHING HAS CHANGED")
value = root.getvar(optVar_name)
self.bookingCanvas(value)这样,就可以删除对get在bookingCanvas中的调用。
def bookingCanvas(self, perfDate):
print("This is a Date >>>",perfDate)
print("did we get here?")https://stackoverflow.com/questions/60010069
复制相似问题