Python 如何销毁网格并创建新网格

Python 如何销毁网格并创建新网格,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,我是这个网站的新手,所以如果我做错了,请原谅我。我正在做一个项目,我们正在尝试制作一个版本的扫雷舰,它将有特定的地雷并形成星座形状 我们试图让它看起来像是一个水平,如果玩家赢了,他们会进入下一个水平。唯一的问题是,在我们的win函数中,我们无法想出如何使用新的矿山创建新的网格,并删除旧的网格,而不将其堆叠或破坏整个框架 您可以从我们的github帐户获取图像文件: 它还有最新的代码,它位于名为TestRun.py的文件中,所有图像都位于images文件夹中 为了方便大家,这里有四幅.gif图像:

我是这个网站的新手,所以如果我做错了,请原谅我。我正在做一个项目,我们正在尝试制作一个版本的扫雷舰,它将有特定的地雷并形成星座形状

我们试图让它看起来像是一个水平,如果玩家赢了,他们会进入下一个水平。唯一的问题是,在我们的win函数中,我们无法想出如何使用新的矿山创建新的网格,并删除旧的网格,而不将其堆叠或破坏整个框架

您可以从我们的github帐户获取图像文件:

它还有最新的代码,它位于名为
TestRun.py的文件中,所有图像都位于
images
文件夹中

为了方便大家,这里有四幅.gif图像:

plantile.gif:
clickedtile.gif:
minetile.gif:
flagtile.gif:


可能还有一些其他问题,但要回答您的问题,您可以向类中添加一个
remove\u button\u grid()
方法,并使用
self.remove\u button\u grid
win()
函数中调用它(而不是当前代码中的
self.master.grid\u forget()

新方法应该是这样的:

    def remove_button_grid(self):
        while self.button:
            button = self.button.pop()
            button.destroy()

顺便说一句,我认为
self.buttons
是按钮列表属性的更好名称。此外,我认为您应该重命名
扫雷舰
class'
grid()
method另一种方法,因为这是从
Frame
继承的布局管理器方法的名称,它所做的事情与子类中定义的完全不同,因为不这样做可能会让熟悉
Tkinter
的人感到困惑,就像我一样,直到它间接出现在注释中。

可能有一些问题其他问题,但要回答您的问题,您可以向类中添加一个
remove\u button\u grid()
方法,并使用
self.remove\u button\u grid
(而不是当前代码中的
self.master.grid\u forget()
)在
win()
函数中调用它

新方法应该是这样的:

    def remove_button_grid(self):
        while self.button:
            button = self.button.pop()
            button.destroy()

顺便说一句,我认为
self.buttons
是按钮列表属性的更好名称。此外,我认为您应该重命名
扫雷舰
class'
grid()
method另一种方法,因为这是从
Frame
继承的布局管理器方法的名称,它所做的事情与子类中定义的完全不同,因为不这样做会让熟悉
Tkinter
的人感到困惑,就像我所做的一样,直到它间接出现在注释中为止。

lse尝试运行你的代码,如果他们有被引用的4
.gif
图像的副本,那会很有帮助。因为你还不能将它们嵌入到你的问题中,我建议将它们上传到一个免费的在线图像共享网站,例如,并在你的问题中添加指向它们的链接。将链接发送到我们的github帐户是否有效?Yes、 我想是的,你的问题和添加链接。你有没有试过简单地删除旧的小部件?销毁小部件的方法有文档记录,而且网上有很多例子。你为什么要删除它们?为什么不把它们更新到你想要的任何新状态?为了让其他人尝试运行你的代码,它将是helpful it他们有被引用的4
.gif
图像的副本。因为你还不能将它们嵌入到你的问题中,我建议将它们上传到一个免费的在线图像共享网站,例如,并在你的问题中添加链接。将链接发送到我们的github帐户会起作用吗?是的,我想是的,请回答你的问题并添加链接链接。yoy有没有尝试过简单地删除旧的小部件?销毁小部件的方法有文档记录,网上有很多例子。你为什么要删除它们?为什么不把它们更新到你想让它们进入的任何新状态?非常感谢你在这方面的帮助!它完全解决了我们的问题。我真的很感谢所有的v非常快速和有用的响应我不会给它命名为“
grid\u忘记”
,因为它与内置函数名冲突。虽然它可以工作,但它会导致代码混乱,因为大多数阅读它的人都不会期望“
grid\u忘记”
”实际破坏一个小部件,而不是仅仅忘记它。@Bryan:这一点很好,通常是这样的好的建议。除此之外,这是一个非常好的相关主题,尽管有点离题。类
扫雷舰
,一个
Tkinter.Frame
子类,定义了自己的
grid()
方法,它与同名的
Tkinter
布局管理器无关。具有讽刺意味的是,这个事实(并且完美地证明了这一点),这让我在回答中编写代码时忘记了布局管理器的方法。因此,更好的一点是,您所说的也适用于现有的
扫雷舰.grid()
方法。非常感谢您在这方面的帮助!它完全解决了我们的问题。我非常感谢所有非常快速和有用的响应。我不会将其命名为
grid\u forget
,因为这与内置函数名冲突。虽然它可以工作,但会导致代码混乱,因为大多数阅读它的人都不会期望
grid\u忘记实际上销毁一个小部件,而不是仅仅忘记它。@Bryan:非常好的观点和通常合理的建议。除此之外,这是一个非常好的相关主题,尽管有点离题。Class
Minesweaper
,一个
Tkinter.Frame
子类,定义了它自己的
grid()
方法与同名的
Tkinter
布局管理器无关。具有讽刺意味的是(并完美地证明了这一点),这一事实让我在回答中编写代码时忘记了
Tkinter
布局管理器的方法。因此,更好的一点是你所说的也是