2009-05-05 33 views
1

我有一個python GUI應用程序,我打算在Windows和Mac上使用。關於Tkinter的文檔並不是最好的,谷歌搜索已經讓我失望了。爲什麼在Python的Tkinter中使用canvas.create_image會中斷?

總之,我做:

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和Tk()),Tkinter很好。自從我安裝了PIL以對抗我的Windows安裝程序(XP SP3,Python 2.6),想象它正在做一些低級別的繁重工作。它似乎不是;我仍然得到上述錯誤。

完整的堆棧跟蹤,但不包括我已經粘貼代碼,是:

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)))) 

任何人都可以擺脫任何輕?

+0

在你進一步嘗試在Mac上試用你的應用程序之前,我曾經在linux上製作過一個Tkinter應用程序,當我不得不將它移植到Mac時,它給了我惡夢:它運行在X(顯然沒有對Tkinter的本地支持),有很多bug在linux版本中不存在,它的工作看起來像sh ** Tkinter的文檔很少,面向命令行的API使調試非常痛苦,而且根據我的經驗,它不是可移植的。給自己一個忙,並用PyQt4或wxWindows編寫你的應用程序(我會推薦PyQt4用於面向對象的API和出色的文檔) – 2009-05-05 15:16:28

回答

4

Tk有兩種類型的圖形,位圖和圖像。圖像有兩種風格,位圖和照片。類型位圖的位圖和圖像不是一回事,這會導致文檔中的混淆。 PhotoImage創建一個照片類型的圖像,並需要在畫布中顯示圖像對象,因此,正如您已經總結的那樣,該解決方案使用create_image。

2

簡短回答: 當您的意思是使用create_image時,不要使用create_bitmap。

0

create_bitmap()方法沒有image參數;它有一個bitmap參數。

你得到的錯誤來自Tkinter的一個事實:Tcl解釋器運行在Python過程中,所有的GUI交互都在Python和Tcl之間來回切換;所以,你得到的錯誤來自Tcl回覆「我不知道.create_bitmap調用中的任何-image選項」的事實。

無論如何,像傑夫說的,你可能想要的方法是create_image

相關問題