1

Text ウィジェットに 2 つの画像オブジェクトを表示しようとしています。最初は、両方のオブジェクトが空の画像として表示されました。いくつかの調査の後、画像への参照を保持する必要があることがわかりました。コードに余分な行を追加しました。2 番目の画像が正しく表示されるようになりましたが、1 番目の画像はまだ空白です。

forループ中に「参照」が上書きされていると思われます。これは事実ですか?もしそうなら、Text ウィジェット内に複数の画像オブジェクトを表示する必要がある場合、どうすれば複数の参照を維持できますか?

これまでの私のコードは次のとおりです。

from Tkinter import *
from PIL import Image, ImageTk
import os

class TestApp:
    def __init__(self, parent):
        self.myParent = parent
        self.main_container = Frame(parent)
        self.main_container.pack()

        self.text_box = Text(self.main_container, height=50, width=80)
        self.text_box.pack()

        image_names = ['img1.jpg', 'img2.jpg']

        for name in image_names:
            img = Image.open(os.getcwd() + '\\' + name)
            img_obj = ImageTk.PhotoImage(img)
            self.text_box.image_create(INSERT, image=img_obj)
            self.text_box.insert(END, "\n")
            # Added this extra reference
            self.text_box.image = img_obj

root = Tk()
root.title("This is a test app")
mainapp = TestApp(root)
root.mainloop()
4

1 に答える 1

2

はい、あなたの参照は上書きされています。

最も簡単なのは、参照をリストに追加することです。例えば:

class TestApp:
    def __init__(...):
        ...
        self.images = []
        ...
        for name in image_names:
            ...
            img_obj = ImageTk.PhotoImage(img)
            self.images.append(img_obj)
于 2013-04-11T17:50:30.200 に答える