2016-10-01 5 views
0

это я снова :) Я продолжаю свой проект. Я застрял (как новичок в этом): У меня есть таблица (список из 4 списков по 4 элемента каждый. Длина гибкая, хотя это только простой пример для вопроса). так вот мой код:Как рисовать таблицу квадратов на холсте tkinter на основе таблицы (списка списков)?

from tkinter import* 
l=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]] 
n=len(l) #this is the length of the list l 
lngt=400/len(l) #this is the dimension of the squares that I want 
fen=Tk() 
fen.geometry("600x400") 

#I would like to create a table of 4 rows on canvas 
#each row should contain 4 squares 
can=Canvas(fen,width=450,height=400,bg="lightblue") 
can.pack(side=LEFT) 
for i in range(n): 
    can.create_rectangle(n, i*(lngt) ,n+lngt, i*n+(i+1)*lngt,  fill="red") 

f=Frame(fen,width=150,height=400,bg="lightcoral") 
f.pack(side=LEFT) 

fen.mainloop() 

В настоящее время, я только получить столбец из 4 квадратов на левой стороне холста. Все мои испытания не смогли создать 12 других квадратов.

Спасибо огромное!

+1

Попробуйте использовать цикл 'for' в цикле' for'. Внешний контур может быть для столбцов, тогда как внутренний цикл для каждой строки внутри одного из столбцов. – jcfollower

+1

Что значит «12 других квадратов»? Это 'l' имеет длину 4, поэтому' n' равно 4. В чем цель 'l'? Код, который вы опубликовали, не использует его, кроме вычисления его длины. –

+0

Я пробовал так, но это не сильно изменилось. Я попытался с помощью «j», но я действительно не знаю, где использовать «j». – Chihab

ответ

1

Вот как нарисовать квадратную сетку квадратов на холсте.

import tkinter as tk 

l = [[0,0,0,0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 
n = len(l)  #this is the length of the list l 
lngt = 400 // n #this is the dimension of the squares that I want 

fen = tk.Tk() 
fen.geometry("600x400") 

#I would like to create a table of 4 rows on canvas 
#each row should contain 4 squares 
can = tk.Canvas(fen, width=450, height=400, bg="lightblue") 
can.pack(side=tk.LEFT) 

for i in range(n): 
    y = i * lngt 
    for j in range(n): 
     x = j * lngt 
     can.create_rectangle(x, y, x+lngt, y+lngt, fill="red") 

f = tk.Frame(fen, width=150, height=400, bg="lightcoral") 
f.pack(side=tk.LEFT) 

fen.mainloop()