2017-05-08 76 views
-1
def create_widget(self): 
    for x in range(11): 
     for y in range(11): 
      self.bttn = Button(self) 
      self.bttn.grid(row=x, column=y) 
      for c in range(len(path)): 
       if [x,y] == path[c]: 
        self.bttn["text"] = numbers[c] 
        break 
      else: 
       self.bttn["text"] = randint(0, 200) 

def select(self): 
    print(self.bttn["text"]) 

注:按鈕矩陣/多按鈕+功能爲每一個

  1. path是座標(例如:[[0, 0], [0, 1], [1, 1], [2, 1], [3, 1], [3, 2], [4, 2], [5, 2], [6, 2], [6, 3], [7, 3], [8,3], [8, 4], [9, 4], [9, 5], [10, 5], [10, 6], [10, 7], [10, 8], [10, 9], [10, 10]])的列表

  2. numbers是隨機生成的數字陣列(例如:[15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99, 105, 111, 117, 123, 129, 135]

我有一個按鈕矩陣,我想要一個功能(例如, function select(self))打印點擊按鈕的文本。現在它只打印最後點擊的按鈕上的文本。

+1

您創建了121個不同的按鈕,然後用新創建的按鈕重複替換'self.bttn'。 –

+0

這些按鈕必須定義某種回調接口,以便您知道何時單擊它,以及它是哪一個。我假設它可能是select方法,在這種情況下,你應該子類化Button並覆蓋該方法。 – arielnmz

回答

0

您聲明的每個新按鈕都會覆蓋同一個self.bttn實例,最終導致您只能訪問最後定義的按鈕。因此,按鈕被創建好了,但你只能訪問最後一個。因此,它的名稱將是您通過self.bttn訪問的名稱,因此每次調用select時都會顯示其名稱。

0

解決方案可能是創建一個嵌套列表來包含您的按鈕,然後找到一些方法來檢索您想要的按鈕。

def __init__(self, ...): 
    ... 
    self.buttons = [] 
    ... 

def create_widget(self): 
    for x in range(11): 
     self.buttons.append([]) 
     for y in range(11): 
      button = Button(self) 
      self.buttons[-1].append(button) 
      button.grid(row=x, column=y) 
      for c in range(len(path)): 
       if [x,y] == path[c]: 
        button["text"] = numbers[c] 
        break 
      else: 
       button["text"] = randint(0, 200) 

def select(self, row, col): 
    button = self.buttons[row][col] 
    print(button["text"]) 

取決於你能夠通過你的select功能什麼樣的信息,其他結構可能會更好。