2013-03-31 25 views
1

所以我目前正在尝试在GUI上创建一个按钮,让用户生成一个新的输入字段。 我不知道如何做到这一点。我猜测它需要一个lambda函数,但除此之外,我不知道。Python - 自动添加小部件

这里是基本的代码,我到目前为止:

from tkinter import * 

class prac: 

    def autoAddWidget(self,frame,x,y): 
     self.entryField = Entry(frame,text="Entry Field") 
     self.entryField.grid(row=x, column=y) 
     #lambda function? 

    def __init__(self, master): 
     frame = Frame(master, width=60, height=50) 
     frame.pack() 

     x=1 
     self.addWidgetButton = Button(frame, text="Add new widget", command=self.autoAddWidget(frame, x,0)) 
     self.addWidgetButton.grid(row=0, column=0) 
     x+=1 


root = Tk() 
app = prac(root) 
root.mainloop() 

将不胜感激帮助。 谢谢

回答

3

您传递给方法self.autoAddWidget(frame, x,0)的方法command参数结果不是方法本身。您必须传递一个对可调用对象的引用,这是一个在事件发生时将被调用的函数。请在问问题之前下次检查documentation

好吧,我固定的代码,现在它的工作原理:

from tkinter import * 

class Prac: 

    def autoAddWidget(self): 
     self.entryField = Entry(self.frame,text="Entry Field") 
     self.entryField.grid(row=self.x, column=0) 
     self.x+=1 

    def __init__(self, master): 
     self.frame = Frame(master, width=60, height=50) 
     self.frame.pack() 

     self.x=1 
     self.addWidgetButton = Button(self.frame, text="Add new widget", command=self.autoAddWidget) 
     self.addWidgetButton.grid(row=0, column=0) 


root = Tk() 
app = Prac(root) 
root.mainloop() 
+0

太谢谢你了!长期以来一直陷在这个问题上。此外,不仅感谢解决方案,也感谢文档。 – Student