Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用tkinter为每个按钮添加不同的图像_Python_Tkinter_Photoimage - Fatal编程技术网

Python 使用tkinter为每个按钮添加不同的图像

Python 使用tkinter为每个按钮添加不同的图像,python,tkinter,photoimage,Python,Tkinter,Photoimage,我们正在为学校创建一个Boggle游戏,我们希望使界面尽可能好。 我们为每个字母创建了一个图标,我们希望每个按钮都有自己的图标。 由于某种原因,is不起作用,我也不明白为什么——它只为最后一个按钮指定了一个图像(如图所示)。 这是我的代码: import tkinter as tk import random import os PATH_DICT = {"A": "\icons\A.png", "B": "\icons\B.png", "C": "\icons\C.png",

我们正在为学校创建一个Boggle游戏,我们希望使界面尽可能好。 我们为每个字母创建了一个图标,我们希望每个按钮都有自己的图标。 由于某种原因,is不起作用,我也不明白为什么——它只为最后一个按钮指定了一个图像(如图所示)。 这是我的代码:

import tkinter as tk
import random
import os


PATH_DICT = {"A": "\icons\A.png", "B": "\icons\B.png", "C": "\icons\C.png",
             "D": "\icons\D.png", "E": "\icons\E.png", "F": "\icons\F.png",
             "G": "\icons\G.png", "H": "\icons\H.png", "I": "\icons\I.png",
             "J": "\icons\J.png", "K": "\icons\K.png", "L": "\icons\L.png",
             "M": "\icons\M.png", "N": "\icons\MN.png", "O": "\icons\O.png",
             "P": "\icons\P.png", "Qu": "\icons\Qu.png", "R": "\icons\R.png",
             "S": "\icons\S.png", "T": "\icons\T.png", "U": "\icons\TU.png",
             "V": "\icons\J.png", "W": "\icons\W.png", "X": "\icons\X.png",
             "Y": "\icons\Y.png", "Z": "\icons\Z.png"}

root = tk.Tk()


def randomize_board():
    letters = [
        ['A', 'E', 'A', 'N', 'E', 'G'],
        ['A', 'H', 'S', 'P', 'C', 'O'],
        ['A', 'S', 'P', 'F', 'F', 'K'],
        ['O', 'B', 'J', 'O', 'A', 'B'],
        ['I', 'O', 'T', 'M', 'U', 'C'],
        ['R', 'Y', 'V', 'D', 'E', 'L'],
        ['L', 'R', 'E', 'I', 'X', 'D'],
        ['E', 'I', 'U', 'N', 'E', 'S'],
        ['W', 'N', 'G', 'E', 'E', 'H'],
        ['L', 'N', 'H', 'N', 'R', 'Z'],
        ['T', 'S', 'T', 'I', 'Y', 'D'],
        ['O', 'W', 'T', 'O', 'A', 'T'],
        ['E', 'R', 'T', 'T', 'Y', 'L'],
        ['T', 'O', 'E', 'S', 'S', 'I'],
        ['T', 'E', 'R', 'W', 'H', 'V'],
        ['N', 'U', 'I', 'H', 'M', 'Qu']
    ]

    board = []
    for i in range(4):
        row = []
        for j in range(4):
            letter = random.choice(letters[i * 4 + j])
            row.append(letter)
        board.append(row)
    return board


ls = randomize_board()
CURR_DIR = os.path.dirname(os.path.abspath(__file__))
image_lst = []
for x in range(4):
    for y in range(4):
        i = 0
        photo1 = tk.PhotoImage(file=CURR_DIR + PATH_DICT[ls[x][y]])
        btn = tk.Button(image=photo1, bg="SkyBlue", activebackground="white",
                        padx=20, pady=20,  command=lambda x=x, y=y: getclick(x, y))
        btn.grid(row=y, column=x)
        i += 1



root.mainloop()
我做错了什么?
谢谢大家!

这里有一个对我有用的小测试:

import tkinter as tk
import random
from PIL import ImageTk, Image

PATH_DICT = {
    "A": "icons/A.png",
    "B": "icons/B.png",
    "C": "icons/C.png"
}

root = tk.Tk()

def randomize_board():
    letters = [
        ['A', 'A', 'A', 'B'],
        ['A', 'A', 'A', 'B'],
        ['A', 'A', 'A', 'B'],
        ['A', 'A', 'C', 'A']
    ]

    board = []
    for i in range(4):
        row = []
        for j in range(4):
            letter = random.choice(letters[i * 4 + j])
            row.append(letter)
        board.append(row)
    return board


# ls = randomize_board()
ls = [
        ['A', 'A', 'A', 'B'],
        ['A', 'A', 'A', 'B'],
        ['A', 'A', 'A', 'B'],
        ['A', 'A', 'C', 'A']
    ]

def create_img(frame, path_to_img):
    width = 100
    height = 140

    img = Image.open(path_to_img)
    img = img.resize((width,height), Image.ANTIALIAS)
    photoImg =  ImageTk.PhotoImage(img)
    btn= tk.Button(frame, image=photoImg, width=width)
    return btn

buttons_list = []

for x in range(4):
    row_btns = []
    for y in range(4):
        row_btns.append(create_img(root, PATH_DICT[ls[x][y]]))
        row_btns[y].grid(row=y, column=x)
    buttons_list.append(row_btns)

root.mainloop()
我无法测试以下代码,因为我没有所有必要的代码,但它应该适合您:

import tkinter as tk
import random
from PIL import ImageTk, Image

PATH_DICT = {"A": "\icons\A.png", "B": "\icons\B.png", "C": "\icons\C.png",
            "D": "\icons\D.png", "E": "\icons\E.png", "F": "\icons\F.png",
            "G": "\icons\G.png", "H": "\icons\H.png", "I": "\icons\I.png",
            "J": "\icons\J.png", "K": "\icons\K.png", "L": "\icons\L.png",
            "M": "\icons\M.png", "N": "\icons\MN.png", "O": "\icons\O.png",
            "P": "\icons\P.png", "Qu": "\icons\Qu.png", "R": "\icons\R.png",
            "S": "\icons\S.png", "T": "\icons\T.png", "U": "\icons\TU.png",
            "V": "\icons\J.png", "W": "\icons\W.png", "X": "\icons\X.png",
            "Y": "\icons\Y.png", "Z": "\icons\Z.png"}

root = tk.Tk()

def randomize_board():
    letters = [
        ['A', 'E', 'A', 'N', 'E', 'G'],
        ['A', 'H', 'S', 'P', 'C', 'O'],
        ['A', 'S', 'P', 'F', 'F', 'K'],
        ['O', 'B', 'J', 'O', 'A', 'B'],
        ['I', 'O', 'T', 'M', 'U', 'C'],
        ['R', 'Y', 'V', 'D', 'E', 'L'],
        ['L', 'R', 'E', 'I', 'X', 'D'],
        ['E', 'I', 'U', 'N', 'E', 'S'],
        ['W', 'N', 'G', 'E', 'E', 'H'],
        ['L', 'N', 'H', 'N', 'R', 'Z'],
        ['T', 'S', 'T', 'I', 'Y', 'D'],
        ['O', 'W', 'T', 'O', 'A', 'T'],
        ['E', 'R', 'T', 'T', 'Y', 'L'],
        ['T', 'O', 'E', 'S', 'S', 'I'],
        ['T', 'E', 'R', 'W', 'H', 'V'],
        ['N', 'U', 'I', 'H', 'M', 'Qu']
    ]

    board = []
    for i in range(4):
        row = []
        for j in range(4):
            letter = random.choice(letters[i * 4 + j])
            row.append(letter)
        board.append(row)
    return board

ls = randomize_board()

def create_img(frame, path_to_img):
    width = 100
    height = 140

    img = Image.open(path_to_img)
    img = img.resize((width,height), Image.ANTIALIAS)
    photoImg =  ImageTk.PhotoImage(img)

    btn = tk.Button(frame, image=photoImg, bg="SkyBlue", activebackground="white",
                        padx=20, pady=20,  command=lambda x=x, y=y: getclick(x, y))
    return btn

buttons_list = []

for x in range(4):
    row_btns = []
    for y in range(4):
        row_btns.append(create_img(root, PATH_DICT[ls[x][y]]))
        row_btns[y].grid(row=y, column=x)
    buttons_list.append(row_btns)

root.mainloop()

你能分享这些图片吗?我想在我的电脑上调试你的程序“我做错了什么?”:你一次又一次地覆盖参考
photo1
。遵循这种方法:只需在
btn.grid(…)
之后添加
btn.image=photo1