【问题标题】:Tkinter Gui For Astar algorithm [duplicate]Tkinter Gui For Astar算法[重复]
【发布时间】:2020-06-23 16:00:19
【问题描述】:

我正在尝试制作 Astar 算法的输入迷宫(寻找起点和目的地之间最短路径的算法,迷宫内可能会有一些堵塞, 它只输入一个代表阻塞的迷宫,如下所示)。

从 GUI 在每个按钮中使用 Click1 命令, 我打算得到这样的输出(我在 [3][2] 处插入了一个阻塞)。
1代表从头到尾寻找路径要避免的阻塞。

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

但我得到如下输出,我不明白为什么它会阻塞每一行的同一列

[[0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0]]

我在 App() 类的 init(): 中使用以下方法创建了迷宫:

def __init__(self, master,dimension,indexes):
   self.maze=[[0]*self.dimension]*self.dimension

整个事情都在一个类 App() 中:
用于创建按钮网格并存储它们的引用

        self.gid = []
        for i in range(self.dimension):
            row = []
            Grid.rowconfigure(self.frame1, i + 1, weight=3)
            for j in range(self.dimension):
                Grid.columnconfigure(self.frame1, j + 1, weight=3)
                btn=Button(self.frame1,command=lambda i=i, j=j: self.Click1(i, j))
                btn.grid(sticky=N+S+E+W,padx=2,pady=2,ipadx=1,ipady=1)
                row.append(btn)
                row[-1].grid(row=i + 1, column=j+1)
            self.gid.append(row)


同样在这个类中的 Click1 方法/命令:

    def Click1(self, i, j):
        self.indxes.append((i,j))
        if len(self.indxes)==1:
            self.gid[i][j]["bg"]="blue" #indicates start
        elif len(self.indxes)==2:
            self.gid[i][j]["bg"]="green" #indicates destinations
        else:
            self.gid[i][j]["bg"] = "black"
            self.maze[i][j] = 1  #how I insert blockage within the maze

【问题讨论】:

    标签: python-3.x list button tkinter a-star


    【解决方案1】:

    在你的初始化中试试这个:

    def __init__(self, master,dimension,indexes):
       self.maze = [[0] * self.dimension] for _ in range(self.dimension)]
    

    后一个* self.dimension 调用为您的所有内部列表分配了相同的引用(维度的次数)——这意味着当一个被改变时,所有的都会改变。

    这会为每个子列表创建一个唯一列表

    【讨论】:

    • 感谢您的成功。一切都发生在课堂上,我忘了。
    • 很高兴听到这有帮助,请考虑接受它,以便将来其他人也可以快速找到答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多