#function #tkinter #command
#функция #tkinter #команда
Вопрос:
Привет, у меня возникли проблемы с вызовом функций в tkinter
Вот код
class Demo(tk.Frame):
def ShowOption(self):
print(self.v1.get())
def __init__(self,controller):
tk.Frame.__init__(self,width=800, height=600)
f = Frame(self)
optionList = ('A', 'B','C')
self.v1 = tk.StringVar()
self.v1.set(optionList[0])
Opt1 = tk.OptionMenu(f, self.v1, *optionList,command = self.ShowOption)
Opt1.grid(row=2,column=2,sticky='w')
f.place(relx = 0.5,rely=0.5,anchor='c')
Проблема, с которой я сталкиваюсь, заключается в том, что если я использую этот метод, в нем указывается, что функция принимает 1 позиционный аргумент, и ни один из них не был задан, но если я использую
Opt1 = tk.OptionMenu(f, self.v1, *optionList,command = self.ShowOption() )
Функция запускается сразу после создания класса.
Любая помощь с благодарностью.
Ответ №1:
Обратный вызов для command
опции OptionMenu
ожидает аргумент, который является выбранным элементом.
Так что либо вы используете lambda
, чтобы пропустить аргумент:
command=lambda v: self.ShowOption()
Или переопределите ShowOption()
, чтобы принять аргумент:
def ShowOption(self, value):
...
Комментарии:
1. Могу ли я узнать необходимость позиционного аргумента v
Ответ №2:
сделайте это
command = lambda : self.ShowOption()
Комментарии:
1. Этот ответ будет улучшен с дальнейшим объяснением: в чем проблема была в исходном коде, как это ее решает.