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