【发布时间】:2018-11-26 09:39:41
【问题描述】:
我的画布显示了一个随机变化颜色的矩形网格,但是当我希望它结束时,它没有显示“再见!”我添加到画布的消息。这是为什么呢?
即使我在 __init__ 内注释行 for i in ...(即首先创建矩形的 for 循环),我也看不到文本。
文本更新是在“更新”函数开始时完成的,在最大迭代之后。
当更改为 self.canvas.create_text(100,100, text="Bye Bye!") 时,它似乎确实有效...但仅当没有显示矩形时
import tkinter as tk
from time import sleep
import random
class GUI:
def __init__(self, rows = 10, cols = 10, iteration_timer = 1):
self.canv_w = 300
self.canv_h = 300
self.cell_w = self.canv_w // cols
self.cell_h = self.canv_h // rows
self.master = tk.Tk()
self.canvas = tk.Canvas(self.master, width = self.canv_w, height = self.canv_h)
self.canvas.pack()
self.rect_dict = {}
self.iteration_timer = iteration_timer
self.iterations = 0
self.MAX_ITER = 10
for r in range(rows):
for c in range(cols):
self.rect_dict[(r*self.cell_h, c*self.cell_w)] = self.canvas.create_rectangle(r *self.cell_h, c *self.cell_w,
(1+r)*self.cell_h, (1+c)*self.cell_w,
fill="blue")
self.master.after(iteration_timer, self.update)
tk.mainloop()
def update(self):
if self.iterations >= self.MAX_ITER:
self.canvas.create_text(0,0,fill="darkblue", font="Times 100 italic bold", text="Bye Bye!")
sleep(2)
self.canvas.delete(tk.ALL)
self.master.destroy()
return
self.iterations += 1
for k in self.rect_dict:
r = self.rect_dict[k]
c = random.choice(['yellow', 'red', 'black', 'blue' , 'white'])
self.canvas.itemconfig(r, fill=c)
# call again
self.master.after(self.iteration_timer, self.update)
def main():
gui = GUI(rows = 20, cols = 20)
if __name__ == "__main__":
main()
【问题讨论】:
标签: python python-3.x canvas tkinter