Python 如何使用多个对象?

Python 如何使用多个对象?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,所以我使用tkinter生成迷宫,但问题是我使用了块作为墙,我仍然是python的初学者,所以我不知道我应该如何做到这一点,问题是: 为了得到一个块,我使用了block=PhotoImage(file='images/block.ppm') 我使用脚本编写了425个对象,并将它们放置在不同的位置,使用block0.place(x=20,y=20),我知道它很愚蠢,但我不知道还能做什么,它打印了迷宫,但当我想用root.destroy命令关闭时 我来不了。我猜是因为我做了这件蠢事。 那我该怎么做呢

所以我使用tkinter生成迷宫,但问题是我使用了块作为墙,我仍然是python的初学者,所以我不知道我应该如何做到这一点,问题是: 为了得到一个块,我使用了
block=PhotoImage(file='images/block.ppm')

我使用脚本编写了425个对象,并将它们放置在不同的位置,使用
block0.place(x=20,y=20)
,我知道它很愚蠢,但我不知道还能做什么,它打印了迷宫,但当我想用root.destroy命令关闭时 我来不了。我猜是因为我做了这件蠢事。 那我该怎么做呢? 我试着学习更多关于课程的知识,但效果不太好。 这是我的密码
提前谢谢

我花了很长时间才弄明白你想做什么。如果您还没有找到问题的解决方案,这里有一些代码可以尝试

您应该做的第一件事是声明一个全局变量来存储所有迷宫块

blocks = [] # create a list for the maze blocks
然后,我们将需要建立和摧毁迷宫的功能。您的代码示例中已经有了类似的结构(
destroythemhehe
mazebuilder
),但是我们可以在这里大大提高可读性和性能

def gamephase():
    global menu, quit, block
    menu = Button(root, text='Menu', relief=RIDGE, bg='#C90', command=menuevent)
    menu.place(x=50, y=540)
    quit = Button(root, text='Quitter', relief=RIDGE, bg='#C90', command=destroy_maze)
    quit.place(x=670, y=540)
    generate = Button(root, text='Generer', relief=RIDGE, bg='#C90', command=build_maze)
    generate.place(x=360, y=540)
建造迷宫的功能并不复杂:

def build_maze():
    global blocks
    for x in range(17):
        for y in range(25):
            if zone[x][y]:
                b = Label(root, image=block)
                b.place(x=20 + y * 30, y=20 + x * 30) # a formula which calculates the position of the block
                blocks.append(b) # add the block to the list
它的功能与函数
mazebuilder
基本相同,但它将所有
标签
s保存到
列表中,该列表比
函数干净得多。现在我们需要一个函数来销毁这些块:

def destroy_maze():
    global blocks
    for x in blocks: # destroy each block
        x.destroy()
    blocks = []
我们完了!这应该是预期的工作,但我还没有彻底测试它


如果使用类而不是全局变量,可以使代码更漂亮。这还可以帮助您防止一些讨厌的bug。

也许您是
root.destroy
而不是
root.destroy()
?一件事看起来与另一件无关…你想做什么?欢迎来到StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。您想做什么?[2] @Pygasm要制作我的迷宫,我必须使用许多“块”图像来制作墙壁,我需要425个块,所以我想知道如何制作所有这些块,而不必调用425次:“块[insertnumber]=Label(根,图像=块)。那我该怎么做呢?非常感谢!!!很抱歉,我之前没有看到你的消息,也很抱歉变量和函数名是用法语命名的,或者是用一种愚蠢的方式命名的,因为我就是这样编码的,哈哈哈,但是非常感谢你,我没有想过要把这些块放在一个列表中,把变量放在一个列表中听起来很奇怪。无论如何,再次感谢你们,情况开始好转,我想我可能会完成这个学校项目!
def destroy_maze():
    global blocks
    for x in blocks: # destroy each block
        x.destroy()
    blocks = []