2013-10-19 4 views
0

사용자가 지정한 크기로 파란색 직사각형 그리드를 초기화하려고합니다. 그러나 사각형은 초기화 된 캔버스에 그리지 않습니다. 나중에 조작 할 수 있도록 행렬에 저장하려고합니다. 내 코드는 다음과 같습니다 :Tkinter가 Canvas에 직사각형을 그리지 않습니다.

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

파이썬 3.x를 사용하고 있습니까? 파이썬 3.x에서는'Tkinter' 모듈의 이름이'tkinter'로 바뀌 었습니다. – falsetru

답변

1

변경된 부분은 # <--입니다.

create_rectanglex1, y1, x2, y2 (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

완벽하고 고마워요. –

관련 문제