Function Tkinter在类中调用函数

Function Tkinter在类中调用函数,function,tkinter,command,Function,Tkinter,Command,嗨,我在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',

嗨,我在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() )
创建类时,函数将直接运行

非常感谢您的帮助。

请这样做

command = lambda : self.ShowOption()

选项菜单
命令
选项的回调需要一个作为所选项的参数

因此,您可以使用
lambda
跳过参数:

command=lambda v: self.ShowOption()
def ShowOption(self, value):
    ...
或重新定义
ShowOption()
以接受参数:

command=lambda v: self.ShowOption()
def ShowOption(self, value):
    ...

我能知道位置论证的必要性吗?这个答案会随着进一步的解释而改进:原始代码中的问题是什么,这是如何解决的。