1
我正在尝试使用tkinter来定期刷新正方形网格。网格中的每个正方形都涂上一定的颜色(比如从给定的函数中获得);在每个正方形的中心绘制一个更小的圆圈(颜色也可以从函数中获得)。tkinter:显示正方形网格
如果我必须从头开始,也许有一个例子或标准配方,我可以使用?
我正在尝试使用tkinter来定期刷新正方形网格。网格中的每个正方形都涂上一定的颜色(比如从给定的函数中获得);在每个正方形的中心绘制一个更小的圆圈(颜色也可以从函数中获得)。tkinter:显示正方形网格
如果我必须从头开始,也许有一个例子或标准配方,我可以使用?
下面是一个快速入门示范,介绍如何绘制矩形和圆形的网格,以及如何每秒更新一次显示。如果你以前从未在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()
您是否在使用圆圈绘制网格或刷新它时遇到问题? – martineau 2011-01-24 11:37:44
@martineau:我以简明的方式进行绘图时遇到问题。我想我误解了tkinter应该如何使用。我认为我不会刷新问题,但我还没有做到。 – max 2011-01-24 11:45:04