【问题标题】:issue with python Tkinter drop down menupython Tkinter下拉菜单的问题
【发布时间】:2012-06-22 15:08:09
【问题描述】:

以下代码是将按钮附加到现有程序上的程序,因此可以在更友好的界面上而不是在代码内部进行选择。我正在尝试使用下拉菜单,但 setEthAnt1 函数似乎有错误:TypeError: setEthAnt1() 不接受任何参数(给定 1)。我不知道我没有传入什么参数。有人有什么想法吗?

from Tkinter import *
import ThreegroupsGraphics as three

def run():
    three.main()

def setEthAnt1():
    name = var.get()
    print name
    three.OneTo2Ant = name
    print three.OneTo2Ant

root = Tk()
var = StringVar()
var.set("Group 1 Ethnic Antagonism")
OptionMenu(root, var, "1","2","3","4","5","6","7","8","9","10", command = setEthAnt1).pack()
butn = Button(root, text = 'run',  command = run)
butn.pack()
root.mainloop() 

【问题讨论】:

    标签: python tkinter arguments drop-down-menu


    【解决方案1】:

    当您为 OptionMenu 指定命令时,所选项目的值将被发送到命令中,这实际上使您的 var.get() 不再需要。见下文:

    from Tkinter import *
    import ThreegroupsGraphics as three
    
    def run():
        three.main()
    
    def setEthAnt1(name):
        print name
        three.OneTo2Ant = name
        print three.OneTo2Ant
    
    root = Tk()
    var = StringVar()
    var.set("Group 1 Ethnic Antagonism")
    OptionMenu(root, var, "1","2","3","4","5","6","7","8","9","10", command = setEthAnt1).pack()
    butn = Button(root, text = 'run',  command = run)
    butn.pack()
    root.mainloop() 
    

    如果你不希望setEthAnt1 有任何参数并且仍然使用var.get(),你可以像这样将OptionMenu 的命令变成一个lamda 函数:

    OptionMenu(root, var, "1","2","3","4","5","6","7","8","9","10", command = lambda _: setEthAnt1).pack()
    

    【讨论】:

      猜你喜欢
      • 2012-12-08
      • 1970-01-01
      • 2017-05-18
      • 2018-09-23
      • 1970-01-01
      • 2012-12-20
      相关资源
      最近更新 更多