简体   繁体   English

如何使用Tkinter显示2D数组?

[英]How to display 2d arrays with tkinter?

I am trying to make a maze game and I am using 2d arrays to store my mazes as functions, as I thought it would be the easiest solution. 我正在尝试制作迷宫游戏,并且我使用2d数组将迷宫作为函数存储,因为我认为这将是最简单的解决方案。 I don't know how to pack each function into a tkinter window so that the player can choose a place to move to by clicking a button (haven't gotten to that yet). 我不知道如何将每个功能打包到tkinter窗口中,以便玩家可以通过单击按钮来选择要移动的位置(尚未到达该位置)。 My main problem is that I don't know how to access the 2d array. 我的主要问题是我不知道如何访问2d数组。

import pygame, sys, tkinter
from tkinter import *

window = tkinter.Tk()


def visblock():
    icon = PhotoImage(file="Player_Icon.png")
    block = tkinter.Label(window, image=icon)
    return block
# These act like walls

def invisblock():
    icon = PhotoImage(file="Player_Icon_Cover.png")
    block = tkinter.Button(window, image=icon)
    return block
# These act like empty spaces"""

maze = [[visblock(), visblock(), visblock(), visblock()],
        [visblock(), invisblock(), invisblock(), visblock()],
        [invisblock(), invisblock(),visblock(), invisblock()],
        [visblock(), invisblock(), invisblock(), invisblock()],
        [visblock(),visblock(), visblock(), visblock()]]

window.mainloop()

One easy way of displaying the buttons/labels created in the above code would be using the below code just before window.mainloop() : 显示以上代码中创建的按钮/标签的一种简单方法是在window.mainloop()之前使用以下代码:

for i, block_row in enumerate(maze):
    for j, block in enumerate(block_row):
        block.grid(row=i, column=j)

Also, note that tkinter needs images to have global references which the images you create haven't, further fix the code by adding global references to your images by modifying your methods to: 另外,请注意,tkinter需要图像具有全局引用,而您创建的图像没有全局引用,请通过以下方法将全局引用添加到图像中来进一步修正代码:

def visblock():
    block = tkinter.Label(window)
    block.image = tkinter.PhotoImage(file="Player_Icon.png")
    block['image'] = block.image
    return block
# These act like walls

def invisblock():
    block = tkinter.Button(window)
    block.image = tkinter.PhotoImage(file="Player_Icon_Cover.png")
    block['image'] = block.image
    return block
# These act like empty spaces"""

The entirety of the code should look like: 整个代码应如下所示:

import tkinter

window = tkinter.Tk()


def visblock():
    block = tkinter.Label(window)
    block.image = tkinter.PhotoImage(file="Player_Icon.png")
    block['image'] = block.image
    return block
# These act like walls

def invisblock():
    block = tkinter.Button(window)
    block.image = tkinter.PhotoImage(file="Player_Icon_Cover.png")
    block['image'] = block.image
    return block
# These act like empty spaces"""

maze = [[visblock(), visblock(), visblock(), visblock()],
        [visblock(), invisblock(), invisblock(), visblock()],
        [invisblock(), invisblock(),visblock(), invisblock()],
        [visblock(), invisblock(), invisblock(), invisblock()],
        [visblock(),visblock(), visblock(), visblock()]]

for i, block_row in enumerate(maze):
    for j, block in enumerate(block_row):
        block.grid(row=i, column=j)

window.mainloop()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM