首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tkinter OptionMenu项被读取为主值

Tkinter OptionMenu项被读取为主值
EN

Stack Overflow用户
提问于 2017-12-16 01:05:24
回答 2查看 383关注 0票数 0

我正在为我的游戏项目构建一个临时界面,这样我就可以在等待图片通过的同时与它交互并测试它,这涉及到选择移动的下拉菜单。我似乎就是不能让OptionMenu小部件工作。

我见过很多人这样称呼它:

代码语言:javascript
复制
optionmenu=tkinter.OptionMenu(master, variable, *listitems)

在上下文中,这看起来像:

代码语言:javascript
复制
UI.window=tkinter.Tk(className='/Temporary Interface')
standard_move=tkinter.StringVar()
standard_move.set('Attack')
standard_moves=tkinter.OptionMenu(master=UI.window,variable=standard_move,*list(UI.party[UI.control.get()].normal_moves))

其中UI.party[UI.control.get()]是表示格斗者的自定义类的实例,normal_moves{'Move Name':move_function}形式的类的字典属性,所以我传入并解压缩玩家提供的作为其当前角色的所有移动名称的列表。

运行它会产生错误TypeError: __init__() got multiple values for argument 'master',我不知道为什么。找出原因并修复错误会有很大的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-16 01:11:43

代码语言:javascript
复制
OptionMenu(master=UI.window,variable=standard_move,*list(UI.party[UI.control.get()].normal_moves))

当您像这样混合关键字参数和打包的位置参数时,*list首先绑定到位置参数,列表中的第一个元素用于master,第二个元素用于variable,其余元素用于选项项。然后,关键字参数尝试将自己绑定到mastervariable,但出现了TypeError,因为这些名称已经有了值。

考虑这个更简单的例子:

代码语言:javascript
复制
def f(a,b,c):
    print(a,b,c)

f(a=23, *[42,99])
#TypeError: f() got multiple values for argument 'a'

尝试传入前两个参数,但不要使用它们的名称。

代码语言:javascript
复制
standard_moves=tkinter.OptionMenu(UI.window,standard_move,*list(UI.party[UI.control.get()].normal_moves))
票数 0
EN

Stack Overflow用户

发布于 2017-12-16 01:19:10

不要说:

代码语言:javascript
复制
OptionMenu(master=UI.window, ...

相反,你可以说:

代码语言:javascript
复制
OptionMenu(UI.window, ...

换句话说,不要使用master关键字。第一个值是不可选的。关键字通常与可选参数一起使用,以使API更简洁。

另外,也不要使用variable关键字。只需传入值即可。

由于使用了关键字,系统对master报告了“多个值”。我猜测,系统没有看到作为master传入的非关键字参数,因此假设master要么为None,要么是*listitems中的第一项。然后它会看到你的master=并抱怨有多个值。我只是运行了这个简单的测试用例来证明这一点。放置master=rootvariable=variable会重现您的错误。

代码语言:javascript
复制
from tkinter import *

root = Tk()
variable = StringVar()
values = list('abc')
option = OptionMenu(root, variable, *values)
option.pack()
root.mainloop()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47836837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档