tkinter: отображение квадратной сетки - PullRequest
1 голос
/ 24 января 2011

Я пытаюсь использовать tkinter для периодического обновления квадратной сетки.Каждый квадрат в сетке окрашен в определенный цвет (скажем, полученный из заданной функции);в центре каждого квадрата нарисован меньший круг (цвет также получается из функции).

Если я должен сделать это с нуля, возможно, есть пример или стандартный рецепт, который я могу использовать?

1 Ответ

3 голосов
/ 24 января 2011

Вот быстрый взлом, показывающий, как рисовать сетку из прямоугольников и кругов, и как обновлять отображение раз в секунду.Если вы никогда раньше не программировали на tk, он использует понятия, которые вам, несомненно, чужды.Вам нужно прочитать на холсте идентификаторы объектов и теги, а также то, что делает команда 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...