Tkinter出乎意料的行为

时间:2012-05-29 21:33:40

标签: python tkinter

我的程序中有一组方法使用Tkinter,它们的行为与我认为的不同。我希望能够在窗口中按下一个按钮并显示更多文本字段,并能够在文本字段中返回结果列表。这就是我所拥有的:

def expandChoice(self):
    root = Tk()

    choices = []

    plusButton = Button (root, text='+', command=self.addChoice(root, choices)) 
    plusButton.pack()

    quitButton = Button (root, text='Ok', command=root.destroy ) 
    quitButton.pack()

    root.mainloop()

    return choices

def addChoice(self, parent, variables):

    variables.append(StringVar())

    text = Entry(parent, textvariable=variables[len(variables)-1])
    text.pack()

当窗口加载(按钮上方)时,会出现一个文本字段,而加号按钮不执行任何操作。我究竟做错了什么?似乎在调用第一个按钮的构造函数时会自动调用addChoice方法,然后在此之后无法工作。

1 个答案:

答案 0 :(得分:0)

command选项引用可调用对象。但是,您立即调用addChoice,然后将返回的内容(无)分配给command选项。

您需要执行Button(...command=self.addChoice)

之类的操作

如果需要传递参数,则需要使用lambda或functools.partial。搜索本网站上的任何一个 - 在SO上已经多次询问和回答了这个问题的变体。