所以我使用tkinter来生成一个迷宫,但问题是我在墙上使用了块,我仍然是python的初学者所以我不知道我应该怎么做,这里是问题 :
我使用了一个块block = PhotoImage(file ='images/block.ppm')
block0 = Label(root, image=block)
block1 = Label(root, image=block)
...
我用一个脚本给我写了425个对象并用block0.place(x=20, y=20)
将它们放在不同的地方,我知道它很愚蠢但我不知道该怎么办,它给我打印了迷宫,但是当我想要的时候用命令root.destroy关闭
我做不到。我想这是因为我做了这个愚蠢的事情。
那我该怎么做呢?
我试图了解更多关于课程的知识,但它也没有奏效。
这是我的代码https://mega.nz/#F!Z7xB2IJK!NSSLM6rRFJDE5kpMPs6W_Q
提前致谢
答案 0 :(得分:1)
我花了很长时间才弄明白你想做什么。如果您还没有找到问题的解决方案,可以尝试以下代码。
你应该做的第一件事是声明一个全局变量来存储所有迷宫块。
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
基本相同,但它将所有Label
保存到blocks
列表中,该列表比blocker
函数更清晰。现在我们需要一个破坏块的函数:
def destroy_maze():
global blocks
for x in blocks: # destroy each block
x.destroy()
blocks = []
我们完成了!这应该按预期工作,但我没有彻底测试过。
如果使用类而不是全局变量,则可以使代码更漂亮。这也可以帮助你防止一些讨厌的错误。