我正在实施一个基本的离散人群动态软件,其中许多人可以在预定义区域移动,避开障碍物并寻找出口。现在,我手动构建具有以下功能的区域,该区域将输入(_xMax, _yMax)
作为输入arena_type[]
,区域的单位为单位单元格。给定尺寸,该函数构建两个2D数组(我处理为1D):arena_shape[]
,对于每个单元格,它包含一个表示单元格类型的数字(-1:单元格是障碍物; 0:单元格为空; 1:单元格为出口); def build_arena(_xMax, _yMax):
xmax = int(_xMax)
ymax = int(_yMax)
arena_type = [0 for xx in range(xmax*ymax)]
arena_shape = [0 for xx in range(xmax*ymax)]
for i in range(0, ymax):
for j in range(0, xmax):
arena_type[j + xmax * i] = 0
arena_shape[j + xmax * i] = 0
if (i == 0):
if j<4 or j>4:
arena_shape[j + xmax * i] = "-"
arena_type[j + xmax * i] = -1
sys.stdout.write("-")
else:
arena_shape[j + xmax * i] = " "
arena_type[j + xmax * i] = 2
sys.stdout.write(" ")
elif i == (ymax-1):
arena_shape[j + xmax * i] = "-"
arena_type[j + xmax * i] = -1
sys.stdout.write("-")
elif j == 0:
if i<4 or i>4:
arena_shape[ j + xmax * i ] = "|"
arena_type[ j + xmax * i ] = -1
sys.stdout.write("|")
else:
arena_shape[j + xmax * i] = " "
arena_type[j + xmax * i] = 1
sys.stdout.write(" ")
elif j==xmax-1:
arena_shape[j + xmax * i] = "|"
arena_type[j + xmax * i] = -1
sys.stdout.write("|")
else:
arena_shape[j + xmax * i] = " "
sys.stdout.write(" ")
return arena_type, arena_shape
,对于每个单元格,保存一个char,指示在stdout或文件中打印竞技场时要绘制的char。
from Tkinter import *
root = Tk()
frame = Frame(root)
frame.grid()
grid = Frame(frame)
grid.grid(sticky=N+S+E+W, column=0, row=7, columnspan=2)
for x in range(60):
for y in range(30):
btn = Button(grid)
btn.grid(column=x, row=y)
root.mainloop()
我现在的目标是用GUI替换此功能,用户可以在单元格网格上绘制自定义区域。这个GUI应该返回到这个网格的程序以及我需要的信息(形状和类型,从绘制区域以某种方式推断)。我浏览了一些Python GUI库(比如Tkinter),但我找不到如何让用户直接从GUI窗口构建区域。我只能找到如何在外部窗口中绘制程序端区域。
非常感谢任何见解。
谢谢!
编辑1:按钮网格(由Bryan Oakley建议)
{{1}}