도대체 Tkinter가 canvas.create_image를 사용하여 중단되는 이유는 무엇입니까?
-
05-07-2019 - |
문제
저는 Windows와 Mac 모두에서 사용할 Python GUI 앱을 작업 중입니다.Tkinter에 대한 문서는 최고가 아니며 google-fu는 나에게 실패했습니다.
간단히 말해서, 나는 다음을 하고 있습니다:
c = Canvas(
master=frame,
width=settings.WINDOW_SIZE[0],
height=settings.WINDOW_SIZE[1],
background=settings.CANVAS_COLOUR
)
file = PhotoImage(file=os.path.join('path', 'to', 'gif'))
c.create_bitmap(position, image=file)
c.pack()
root.mainloop()
create_bitmap 줄을 주석 처리하면 앱이 제대로 그려집니다.다시 주석을 달면 다음 오류가 발생합니다.
_tkinter.TclError: unknown option "-image"
이상하네요.Python 테스트에 따르면 Tkinter는 괜찮습니다(예: _tkinter, Tkinter 가져오기 및 수행). Tk()
).그 이후로 저는 Windows 설정(XP SP3, Python 2.6)에 대해 PIL을 설치했는데, 이것이 낮은 수준에서 무거운 작업을 수행하고 있다고 상상했습니다.그렇지 않은 것 같습니다.앞서 언급한 오류가 계속 발생합니다.
이미 붙여넣은 코드를 제외한 전체 스택 추적은 다음과 같습니다.
File "C:\Python26\lib\lib-tk\Tkinter.py", line 2153, in create_bitmap
return self._create('bitmap', args, kw)
File "C:\Python26\lib\lib-tk\Tkinter.py", line 2147, in _create
*(args + self._options(cnf, kw))))
누구든지 빛을 비출 수 있습니까?
해결책
Tk에는 비트맵과 이미지라는 두 가지 유형의 그래픽이 있습니다.이미지는 비트맵과 사진의 두 가지 형태로 제공됩니다.비트맵 유형의 비트맵과 이미지는 동일한 것이 아니므로 문서에서 혼란을 야기합니다.PhotoImage는 photo 유형의 이미지를 생성하고 캔버스에 이미지 개체가 필요하므로 솔루션은 이미 결론을 내린 것처럼 create_image를 사용하는 것입니다.
다른 팁
짧은 답변 : create_image를 사용하려는 경우 create_bitmap을 사용하지 마십시오.
그만큼 create_bitmap()
메소드에는 AN이 없습니다 image
논쟁; 그것은 있습니다 bitmap
대신 논쟁.
당신이 얻는 오류는 Tkinter에서 TCL 통역사가 Python 프로세스에 내장되어 있고 모든 GUI 상호 작용이 Python과 TCL 사이의 앞뒤로 진행된다는 사실에서 비롯됩니다. 따라서 오류는 TCL이 ".Create_BitMap 호출에서 -Image 옵션을 모른다"는 사실에서 비롯됩니다.
어쨌든 Jeff가 말했듯이 create_image
방법.