如何让用户在Python中使用GUI绘制图形?

时间:2016-05-03 16:24:22

标签: python user-interface tkinter tkinter-canvas

我正在实施一个基本的离散人群动态软件,其中许多人可以在预定义区域移动,避开障碍物并寻找出口。现在,我手动构建具有以下功能的区域,该区域将输入(_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}}

0 个答案:

没有答案