我有一个程序,需要一个二维数组。数组内部是“GREEN”或“BLACK”的值。黑色或绿色取决于密度变量,该变量可通过屏幕上的文本框编辑。我创建一个画布,然后为数组的每个索引创建一个1x1矩形,将其着色为黑色或绿色。在那之后,我想做的是通过我的数组重申,并设置我的绿色矩形为红色。另外,如果北、东、南和西的任何矩形都是绿色的,我还想将它们设置为红色。这就是我的问题所在。我想做最后一步一次一个矩形,并更新我的屏幕,这样我就可以慢慢看到矩形从绿色变为红色。我怎样才能一步一步而不是一次完成呢?我已经尝试过在一些地方使用after()方法,但是没有改变程序的行为。如果你有什么想法,请告诉我。我最近的尝试是:
root.after(5)
第61行。这是我的完整代码:
import tkinter as tk
import random
# 150 x 150 array, initialized all cells to 0-1
a, b = 150, 150;
density = .5
def RedOrGreen():
c = random.uniform(0,1)
if c > density:
d = "GREEN"
else:
d = "BLACK"
return d
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.density_label = tk.Label(text = "Tree Density")
self.density_label.pack(side="top")
self.density_textbox = tk.Entry(bd = 5)
self.density_textbox.pack(side = "top")
self.setup = tk.Button(bottomframe, text = "Setup", command = self.setupClick)
self.setup.pack(side="bottom")
self.forest = tk.Canvas(self, width = 500, height = 500)
def setupClick(self):
print(self.density_textbox.get())
global density
density = float(self.density_textbox.get())
Matrix = [[RedOrGreen() for x in range(a)] for y in range(b)]
for x in range(a):
for y in range(b):
self.forest.create_rectangle(x,y,x+1,y+1, fill = Matrix[x][y], width = 0)
self.forest.pack()
for x in range(a):
for y in range(b):
if x != 0 and x != 149 and y != 0 and y != 149:
if Matrix[x][y] == "GREEN":
Matrix[x][y] = "RED"
#north
if Matrix[x][y-1] == "GREEN":
Matrix[x][y-1] = "RED"
#east
if Matrix[x+1][y] == "GREEN":
Matrix[x+1][y] = "RED"
#south
if Matrix[x][y+1] == "GREEN":
Matrix[x][y+1] = "RED"
#west
if Matrix[x-1][y] == "GREEN":
Matrix[x-1][y] = "RED"
for y in range(b):
for x in range(a):
self.forest.create_rectangle(x,y,x+1,y+1, fill = Matrix[x][y], width = 0)
#root.after(5)
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
bottomframe = tk.Frame(root)
bottomframe.pack(side = "bottom")
app = Application(master=root)
app.mainloop()
目前没有回答
相关问题 更多 >
编程相关推荐