2010-05-13 102 views
1

我試圖學習Tkinter的目標是能夠創建一個'實時'範圍來繪製數據。作爲測試,我試圖在每次按下「繪製」按鈕時在畫布上繪製多邊形。三角形的位置是隨機的。我有兩個問題:動態添加項目到Tkinter帆布

  1. 程序啓動時畫布上有一個三角形,爲什麼以及如何解決此問題?

  2. 當我按下按鈕時,它不繪製任何三角形,至少沒有我能看到的。

CODE


from Tkinter import * 

from random import randint 

class App: 

    def __init__(self,master): 

     #frame = Frame(master) 
     #frame.pack(side = LEFT) 

     self.plotspc = Canvas(master,height = 100, width = 200, bg = "white") 
     self.plotspc.grid(row=0,column = 2, rowspan = 5) 

     self.button = Button(master, text = "Quit", fg = "red", \ 
          command = master.quit) 
     self.button.grid(row=0,column=0) 

     self.drawbutton = Button(master, text = "Draw", command = \ 
           self.pt([50,50])) 
     self.drawbutton.grid(row = 0, column = 1)   

    def pt(self, coords): 
     coords[0] = coords[0] + randint(-20,20) 
     coords[1] = coords[1] + randint(-20,20) 
     x = (0,5,10) 
     y = (0,10,0) 
     xp = [coords[0] + xv for xv in x] 
     yp = [coords[1] + yv for yv in y] 
     ptf = zip(xp,yp) 
     self.plotspc.create_polygon(*ptf)   

    if __name__ == "__main__": 
     root = Tk() 
     app = App(root) 
     root.mainloop() 

回答

5

command=self.pt([50,50])(您在Button調用它建立在繪製按鈕使用)立即執行你告訴它來執行調用,並綁定結果(None)至command。相反,在相同的情況下使用:

, command=lambda: self.pt([50, 50])) 

將每次按下該按鈕時延遲執行呼叫。