2013-10-19 81 views
0

我正嘗試以用戶指定的大小初始化藍色矩形的網格。但是,矩形不是在初始化的畫布上繪製的。我試圖將它們存儲在矩陣中供以後操作。我的代碼如下:Tkinter不會在畫布上繪製矩形

import Tkinter 
import sys 
from math import floor 

master = Tkinter.Tk() 

xboxes = int(sys.argv[1]) 
yboxes = int(sys.argv[2]) 

winx = 800 
winy = 600 

w = Tkinter.Canvas(master, width=winx, height=winy) 

squares = [[None]*5 for i in range(5)] 
w.pack() 
for i in range(yboxes): 
    for j in range(xboxes): 
     initx = floor(winx/xboxes * j) 
     inity = floor(winy/yboxes * i) 
     sizex = floor(winx/xboxes * j) 
     sizey = floor(winy/yboxes * i) 
     squares[i][j] = w.create_rectangle(initx, inity, sizex, sizey, fill="red") 

master.mainloop() 

任何想法爲什麼它不工作?任何幫助將非常感激。

+0

您確定您使用的是Python 3.x嗎?在Python 3.x中,'Tkinter'模塊被重命名爲'tkinter'。 – falsetru

回答

1

我用# <--評論過改變過的零件。 (不是x, y, xsize, ysize)。

try: 
    import Tkinter 
except ImportError: 
    import tkinter as Tkinter 
import sys 
from math import floor 

master = Tkinter.Tk() 

xboxes = int(sys.argv[1]) 
yboxes = int(sys.argv[2]) 

winx = 800 
winy = 600 

w = Tkinter.Canvas(master, width=winx, height=winy) 

squares = [[None]*xboxes for i in range(yboxes)] # <-- changed hard-coded 5; to use passed argument 
w.pack() 
for i in range(yboxes): 
    for j in range(xboxes): 
     initx = floor(winx/xboxes * j) # <-- 
     inity = floor(winy/yboxes * i) # <-- 
     endx = floor(winx/xboxes * (j+1)) # <-- with `j`, It draw dot instead of rectangle. 
     endy = floor(winy/yboxes * (i+1)) # <-- 
     squares[i][j] = w.create_rectangle(initx, inity, endx, endy, fill="red") 

master.mainloop() 
+0

完美,非常感謝 –