2016-05-26 4 views
1

Я ищу, как создать сетку кнопок автоматически с помощью итерации.Создание кнопок в tkinter из массива Python

Например, у меня есть этот массив

Array = 
     [[0,0,0,0,0,0,0], 
     [0,0,0,0,0,0,0], 
     [0,0,0,0,0,0,0], 
     [0,0,0,0,0,0,0], 
     [0,0,0,0,0,0,0], 
     [0,0,0,0,0,0,0]] 

И я смотрю что-то вроде

from tkinter import * 

window = Tk() 
def create_buttons(): 
    global Array 
    for rows in Array: 
     for numbers in rows: 
      button = Button (text = 'Hello') 
      button.pack() 
window.mainloop() 

Любая помощь будет оценена

+0

какие проблемы вы с? Вы на самом деле пытались создать кнопку в своем цикле? –

+0

Я начинаю программировать с Python, поэтому у меня нет большого опыта. – CDR

+0

Он создает кнопки, но по вертикали и не позволяет мне использовать сетку. Я отредактировал algoritm в вопросе – CDR

ответ

2

Оставим в MCVE, что @BryanOakley советовала вам нужно использовать объектно-ориентированные концепции.

В приведенном ниже коде инициализации() метод создает 6x7 numpy массив нулей (как у вас), то перебирает ее 2 осей (размеры) для создания кнопки на каждой итерации:

''' 
Created on May 27, 2016 

@author: Billal BEGUERADJ 
''' 

import Tkinter as Tk 
import numpy as np 

class Begueradj(Tk.Frame): 
    def __init__(self,parent): 
     Tk.Frame.__init__(self, parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     ''' 
     Draw the GUI 
     ''' 
     self.parent.title("RUN ON START TEST")  
     self.parent.grid_rowconfigure(1,weight=1) 
     self.parent.grid_columnconfigure(1,weight=1) 

     self.frame = Tk.Frame(self.parent) 
     self.frame.pack(fill=Tk.X, padx=5, pady=5) 

     # Create a 6x7 array of zeros as the one you used 
     self.a = np.zeros((6,7)) 
     for i in range(0,self.a.shape[0]): 
      for j in range(0,self.a.shape[1]): 
       self.b = Tk.Button(self.frame, text = 'Hello') 
       self.b.grid(row=i, column= j) 

# Start the main program here    
if __name__ == "__main__": 
    root=Tk.Tk() 
    app = Begueradj(root) 
    root.mainloop() 

Вот что вы получите после выполнения вышеуказанной программы:

enter image description here

Смежные вопросы