2013-03-31 27 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