> 백엔드 개발 > 파이썬 튜토리얼 > 내 Tkinter 이미지가 클래스 내부에 나타나지 않는 이유는 무엇입니까?

내 Tkinter 이미지가 클래스 내부에 나타나지 않는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-27 21:43:13
원래의
887명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿