2016-07-23 42 views
1

我有一个有点强迫症特质,我喜欢明确指定什么参数设置为什么值。例如,给定一个函数:Tkinter OptionMenu参数

def func(a, b): 
    return a+b 

每当我在我的代码上面的函数调用,我总是写:

func(a=6, b=7) 

相反的:

func(6, 7) 

我的问题米有,是我似乎无法与Tkinter的OptionMenu类做到这一点。以下示例位于自定义类中

self.var = tk.StringVav() 
choices = ['op1', 'op2'] 
self.menu_m = tk.OptionMenu(master=self.frame_1, variable=self.var, *choices) 

这会导致参数'master'的多个值。我该如何明确定义要使用的主选项,变量和选项列表?

+0

您可能忽略的说法,'值=“op1'' –

+0

*'STRINGVAR()' –

+0

它不会当你连尝试一下本作'variable'工作:'变量= self.var'引发'TypeError'。错误的主体说:'__init __()为参数'variable''获得了多个值。 –

回答

3

不幸的是,OptionMenu小部件的实现有点不好。无论您的偏好如何,optionmenu都不旨在接受前三个参数master,variablevalue的关键字参数。它们必须按照位置参数的顺序呈现。

self.menu_m = tk.OptionMenu(self.frame_1, self.var, *choices) 
+0

为什么你写'..,选择[0],*选择)''而不是'...,*选择)'?看起来像前者会导致第一个菜单项出现两次。 – martineau

+2

@martineau:我显然很困惑。不幸的是,tk和ttk OptionMenus略有不同,我当时一定在想ttk optionmenu。 'ttk.OptionMenu'在位置参数之后紧接着一个名为'default'的附加关键字参数。我会解决答案。 –

相关问题