2014-07-22 41 views
0

工作,我試圖創建一個使用Tkinter的模塊中的環結合。事件和綁定在Tkinter的不循環

from tkinter import * 
class Gui(Frame): 
    def __init__(self, parent): 
     Frame.__init__(self, parent) 
     self.parent = parent 
     self.initUI() 
    def Arrays(self,rankings): 
     self.panels = {} 
     self.helpLf = LabelFrame(self, text="Array Layout:") 
     self.helpLf.grid(row=10, column=9, columnspan=5, rowspan=8) 
     for rows in range(10): 
      for cols in range(10): 
       x = str(rows)+"_"+str(cols) 
       self.row = Frame(self.helpLf) 
       self.bat = Button(self.helpLf,text=" ", bg = "white") 
       self.bat.grid(row=10+rows, column=cols) 
       self.panels[x] = self.bat 
       self.panels[x].bind('<Button-1>', self.make_lambda()) 
       self.panels[x].bind('<Double-1>', self.color_change1) 

    def color_change(self, event): 
     """Changes the button's color""" 
     self.bat.configure(bg = "green") 
    def color_change1(self, event): 
     self.bat.configure(bg = "red") 

這裏有10X10 = 100個按鈕。該活頁夾僅適用於最後一個按鈕。有誰知道我該如何應用所有按鈕的活頁夾?

回答

2

您在color_change1中使用self.bat,但self.bat保留最後一個按鈕,因爲您在循環中將其覆蓋。但是你保持self.panels[x]中的所有按鈕都可以訪問任何按鈕。所以你可以使用它。

但有更簡單的解決方案 - 結合使用可變event發送有關事件,以執行功能的一些信息。例如event.widget給你訪問窗口小部件,其執行功能color_change1所以你可以使用它:

def color_change1(self, event): 
    event.widget.configure(bg = "red") 

請參閱「事件屬性」 Events and Bindings

+0

真棒上。有效。 –