2011-01-24 4 views
1

저는 tkinter를 사용하여 사각형 격자를 주기적으로 새로 고칩니다. 격자의 각 사각형은 특정 색상으로 칠해진다 (주어진 함수에서 얻음). 각 사각형의 가운데에는 더 작은 원이 그려집니다 (색상은 함수에서도 가져옵니다).tkinter : 사각형 격자 표시

내가 처음부터 그것을해야한다면, 내가 사용할 수있는 예제 또는 표준 요리법이있을 것입니까?

+1

그리드에 원을 그리거나 새로 고칠 때 문제가 있습니까? – martineau

+0

@martineau : 나는 도면을 간결하게하는 데 문제가 있습니다. 나는 tkinter가 어떻게 사용되기로되어 있는지 오해 한 것 같습니다. 내가 새로 고침에 문제가 없을 것이라고 생각하지만 아직 그것에 도달하지 못했습니다. – max

답변

3

다음은 직사각형과 원 그리드를 그리는 방법과 1 초에 한 번씩 디스플레이를 업데이트하는 방법을 보여주는 빠른 해킹입니다. 전에 tk 프로그래밍을 해 본 적이 없다면 의심의 여지가없는 개념을 사용합니다. 캔버스 객체 ID와 태그뿐만 아니라 after 명령이 무엇인지 읽어 올 필요가있다.

import Tkinter as tk 
import random 

class App(tk.Tk): 
    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     self.canvas = tk.Canvas(self, width=500, height=500, borderwidth=0, highlightthickness=0) 
     self.canvas.pack(side="top", fill="both", expand="true") 
     self.rows = 100 
     self.columns = 100 
     self.cellwidth = 25 
     self.cellheight = 25 

     self.rect = {} 
     self.oval = {} 
     for column in range(20): 
      for row in range(20): 
       x1 = column*self.cellwidth 
       y1 = row * self.cellheight 
       x2 = x1 + self.cellwidth 
       y2 = y1 + self.cellheight 
       self.rect[row,column] = self.canvas.create_rectangle(x1,y1,x2,y2, fill="blue", tags="rect") 
       self.oval[row,column] = self.canvas.create_oval(x1+2,y1+2,x2-2,y2-2, fill="blue", tags="oval") 

     self.redraw(1000) 

    def redraw(self, delay): 
     self.canvas.itemconfig("rect", fill="blue") 
     self.canvas.itemconfig("oval", fill="blue") 
     for i in range(10): 
      row = random.randint(0,19) 
      col = random.randint(0,19) 
      item_id = self.oval[row,col] 
      self.canvas.itemconfig(item_id, fill="green") 
     self.after(delay, lambda: self.redraw(delay)) 

if __name__ == "__main__": 
    app = App() 
    app.mainloop() 
+0

감사합니다! tkinter에 대한 포괄적 인 문서가 있습니까? 예를 들어,'create_oval'은 지정된 경계 사각형 내에서 타원형을 만듭니다. 그러나이 함수의 공식 설명은 어디에서나 찾을 수 없습니다. – max

+0

@max : tkinter를위한 더 나은 온라인 리소스 중 하나는 http://effbot.org/tkinterbook/입니다. Tkinter는 tk를 둘러싼 파이썬 래퍼입니다. tk에 대한 확실한 문서는 http://www.tcl.tk/man/tcl8.5/TkCmd/contents.htm이지만 파이썬이 아닌 Tcl을 사용한다고 가정합니다. 파이썬으로 tcl 코드를 번역하는 것은 작은 정신 장애물 일뿐입니다. efbot 문서로 시작한 다음 더 자세한 내용이 필요하면 tcl 문서를 읽으십시오. –

+0

외부에서가 아니라'App .__ init__' 메소드 내부에서'self.mainloop()'호출을 할 수 있습니까? – max