【发布时间】:2020-11-24 20:07:40
【问题描述】:
我已经在网上搜索了几个小时如何删除并接下来在 Tkinter 上重新创建“画布”。
首先是我的代码:
import tkinter as tk
import time
import numpy as np
m = 100
matrice = np.zeros((m,m))
matrice[10][10] = 1
root = tk.Tk()
root.title("Test")
root.geometry('1200x800')
canvas = tk.Canvas(width = 700 , height = 700)
def trace(m) :
global canvas
m2 = int(700/m)
canvas.destroy()
canvas = tk.Canvas(width = 700 , height = 700)
for i in range(0,m) :
for j in range(0,m) :
x = m2*i
y = m2*j
canvas.create_rectangle(x , y , m2+x , m2+y,outline = 'grey' , width = 1)
def affiche_points(m,matrice) :
global canvas
m2 = int(700/m)
for i in range(m):
for j in range(m):
if matrice[i][j] == 1 :
x = m2*i
y = m2*j
canvas.create_rectangle(x , y , m2+x , m2+y , fill = 'black')
def actualisation(m,matrice) :
global canvas
trace(m)
affiche_points(m,matrice)
canvas.pack()
actualisation(m,matrice)
for i in range(0,20) :
matrice = np.zeros((m,m))
matrice[i][10] = 1
actualisation(m,matrice)
time.sleep(0.5)
root.mainloop()
我只想创建一个网格,当矩阵中的元素发生变化时,网格也会发生变化(0 = 白色,1 = 黑色) 就我而言,我使用
canvas.destroy()
清除窗口
然后我用 time.sleep() 等待 0.5 秒,直到我显示来自矩阵的新图像
我的问题是我看不到实现 :(
我只看到最后一帧! 不知道是canvas.pack()之类的不能刷新。
注意:这是对更大计划的简化!
NB 2:对不起,我的英语很奇怪,我是法国人,你知道...
谢谢你
【问题讨论】:
-
你不需要破坏画布,使用
canvas.delete('all')清除画布。同样time.sleep()会阻塞应用程序,所以mainloop()在for 循环结束之前不会被执行来更新画布。在trace()的末尾使用canvas.update()和affiche_points()函数来强制更新。 -
谢谢它真的很好用!
-
我的主要问题是在每次刷新之间添加时间!但我找到了 root.after(time in ms)