ホームページ >バックエンド開発 >Python チュートリアル >私の Tkinter イメージがクラス内に表示されないのはなぜですか?

私の Tkinter イメージがクラス内に表示されないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-27 21:43:13880ブラウズ

Why Doesn't My Tkinter Image Appear Inside a Class?

クラスでは Tkinter イメージを使用できません

Tkinter では、関数内でイメージを作成すると、予期しない動作が発生する可能性があります。クラス外の次のコードは画像を正常に表示します:

import tkinter

root = tkinter.Tk()
canvas = tkinter.Canvas(root)
canvas.grid(row=0, column=0)
photo = tkinter.PhotoImage(file='./test.gif')
canvas.create_image(0, 0, image=photo)
root.mainloop()

クラス内に配置された同じコードは画像を表示しません:

import tkinter

class Test:
    def __init__(self, master):
        canvas = tkinter.Canvas(master)
        canvas.grid(row=0, column=0)
        photo = tkinter.PhotoImage(file='./test.gif')
        canvas.create_image(0, 0, image=photo)

root = tkinter.Tk()
test = Test(root)
root.mainloop()

解決策: の範囲画像参照

この問題は、photo 変数がクラス コンストラクター内のローカル変数であるために発生します。コンストラクターが終了すると、変数はガベージ コレクターによって破棄されます。画像が引き続き表示されるようにするには、photo 変数への参照をクラス内に保存する必要があります。これは、コードを次のように変更することで実現できます。

class Test:
    def __init__(self, master):
        self.canvas = tkinter.Canvas(master)
        self.canvas.grid(row=0, column=0)
        self.photo = tkinter.PhotoImage(file='./test.gif')
        self.canvas.create_image(0, 0, image=self.photo)

root = tkinter.Tk()
test = Test(root)
root.mainloop()

photo 変数を self.photo に割り当てることで、コンストラクターが完了した後も画像への参照が維持されます。これにより、クラス内でイメージを表示できるようになります。

Tkinter イメージの問題の検索

Tkinter イメージが表示されないという同様の問題が発生した場合は、関連するイメージを検索することを忘れないでください。ドキュメントやフォーラムのスレッドは、原因と解決策についての貴重な洞察を提供します。変数のスコープと参照を維持する方法を理解することで、Tkinter アプリケーション内で画像を効果的に表示できます。

以上が私の Tkinter イメージがクラス内に表示されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。