저는 tkinter를 사용하여 사각형 격자를 주기적으로 새로 고칩니다. 격자의 각 사각형은 특정 색상으로 칠해진다 (주어진 함수에서 얻음). 각 사각형의 가운데에는 더 작은 원이 그려집니다 (색상은 함수에서도 가져옵니다).tkinter : 사각형 격자 표시
내가 처음부터 그것을해야한다면, 내가 사용할 수있는 예제 또는 표준 요리법이있을 것입니까?
저는 tkinter를 사용하여 사각형 격자를 주기적으로 새로 고칩니다. 격자의 각 사각형은 특정 색상으로 칠해진다 (주어진 함수에서 얻음). 각 사각형의 가운데에는 더 작은 원이 그려집니다 (색상은 함수에서도 가져옵니다).tkinter : 사각형 격자 표시
내가 처음부터 그것을해야한다면, 내가 사용할 수있는 예제 또는 표준 요리법이있을 것입니까?
다음은 직사각형과 원 그리드를 그리는 방법과 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()
감사합니다! tkinter에 대한 포괄적 인 문서가 있습니까? 예를 들어,'create_oval'은 지정된 경계 사각형 내에서 타원형을 만듭니다. 그러나이 함수의 공식 설명은 어디에서나 찾을 수 없습니다. – max
@max : tkinter를위한 더 나은 온라인 리소스 중 하나는 http://effbot.org/tkinterbook/입니다. Tkinter는 tk를 둘러싼 파이썬 래퍼입니다. tk에 대한 확실한 문서는 http://www.tcl.tk/man/tcl8.5/TkCmd/contents.htm이지만 파이썬이 아닌 Tcl을 사용한다고 가정합니다. 파이썬으로 tcl 코드를 번역하는 것은 작은 정신 장애물 일뿐입니다. efbot 문서로 시작한 다음 더 자세한 내용이 필요하면 tcl 문서를 읽으십시오. –
외부에서가 아니라'App .__ init__' 메소드 내부에서'self.mainloop()'호출을 할 수 있습니까? – max
그리드에 원을 그리거나 새로 고칠 때 문제가 있습니까? – martineau
@martineau : 나는 도면을 간결하게하는 데 문제가 있습니다. 나는 tkinter가 어떻게 사용되기로되어 있는지 오해 한 것 같습니다. 내가 새로 고침에 문제가 없을 것이라고 생각하지만 아직 그것에 도달하지 못했습니다. – max