Tkinter не отображает изображения - ошибка не отображается - PullRequest
0 голосов
/ 18 января 2020

Я пишу программу на Python с использованием библиотеки tkinter, чтобы я мог отображать 4 изображения по указанному пути, однако изображения загружаются неправильно. Существует большое пространство, в которое должны были загружаться изображения, однако на самом деле изображения там нет (см. Прикрепленные снимки экрана). Я использую ImageTk и Image из импорта PIL, так как я прочитал, как это сделать в другом посте, однако у меня это не сработало.

Вот некоторый связанный код: (справочная информация: программа для арабского языка c букв LOL)

# imports
from tkinter import *
from PIL import ImageTk,Image
import random

# variables
letters = ["yaa", "ghayn", "waaw", "ayn", "haa", "khaa", "miim", "7aa", "kaaf",
            "jiim", "qaaf", "baa", "faa", "alif", "nuun", "siin", "lam", "zay",
            "thaa-1", "raa", "taa-1", "thaal", "daad", "daal", "saad", "thaa-2",
             "shiin", "taa-2"] # a list of letters to be used later in the program

# GUI class
class Gui:
    def __init__(self):
        self.root = Tk(); self.root.title("Letter Learning")
        self.setup() # calls the setup function to load all the labels etc

    def setup(self):
        # top
        Label(self.root, text="Generate a new letter:").grid(row=0,column=0)
        Button(self.root, text="click me", command=self.pickLetter).grid(row=0,column=1)

    def pickLetter(self):
        label = {}
        letter = random.choice(letters)
        path = [f"letters\\{letter}-{x}.jpg" for x in range(4)]
        print(path)
        for x in range(4):
            label[f"image{x}"] = ImageTk.PhotoImage(Image.open(path[x])) # reference to the image
            Label(self.root, image=label[f"image{x}"]).grid(row=2, column=x) # putting the image in

Как вы можете видеть, я использовал для l oop для перебора моих файлов (они сохраняются как <letter-0>, <letter>-1 et c) и поместите ярлык в окно. Я сохранил ссылку на изображение в словаре, как говорится в другом посте, чтобы сохранить ссылку на изображения, которые вы используете, однако ничего не отображается.

Вот до / после загрузки изображений:

Before I generate the images

After I generate the images

1 Ответ

0 голосов
/ 18 января 2020
def pickLetter(self):
        self.label = {}
        letter = random.choice(letters)
        path = [f"letters\\{letter}-{x}.jpg" for x in range(4)]
        print(path)
        for x in range(4):
            self.label[f"image{x}"] = ImageTk.PhotoImage(Image.open(path[x]))
            Label(self.root, image=self.label[f"image{x}"]).grid(row=2, column=x) 

Благодаря использованию словаря label для всего класса через self.label (из-за отсутствия более точных терминов) это позволяет отображать изображения.

...