2009-05-05 15 views
1

私はWindowsとMacの両方で使うつもりのpython GUIアプリケーションを持っています。 Tkinterのドキュメントは最高ではなく、google-fuは私に失敗しました。要するになぜPythonのTkinterはcanvas.create_imageを使って中断しますか?

、私がやっている:私はcreate_bitmapの行をコメントアウトした場合

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

は、アプリが細かい描画します。私は後ろにそれをコメントする場合は、私は次のエラーを取得する:奇数である

_tkinter.TclError: unknown option "-image"

を。 Pythonテスト(つまり、_tkinter、Tkinterのインポート、Tk()の実行)によると、Tkinterは問題ありません。私は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)))) 

任意の光を当てることができる誰ですか?

+0

まだMacにあなたのアプリを試してみましたか?私はかつて私がMacに移植しなければならなかったときに悪夢を与えたTkinterアプリをLinux上で作った。それはXの下で走った(Tkinterには明らかにTkinterのアクアサポートがない)、Linuxバージョンにはなかったたくさんのバグがあったそれはsh **のように見えました。 Tkinterの記述が不十分で、コマンドライン指向のAPIがデバッグするのに苦労します。私の経験では移植性がありません。 PyQt4またはwxWindowsで自分の好きなアプリを書くことができます(もっとオブジェクト指向のAPIと素晴らしいドキュメンテーションのためにPyQt4をお勧めします) –

+0

私が今考えていることは確かです。最終的には、私が書いているアプリはTkをウィンドウアプリとして使い慣れた小さなものです。私は前にWxに触れたことがある。より大きなプロジェクトにはQtやWxを使用することになります。 –

+0

補遺:昨日の私のMacで(その '働く'形式で)テストしなければならない。正常に動作します。ここまでは順調ですね。 –

答えて

4

Tkには、ビットマップとイメージの2種類のグラフィックスがあります。画像はビットマップと写真の2つの味があります。 bitmap型のビットマップとイメージは同じものではないため、ドキュメントに混乱が生じます。 PhotoImageは写真タイプの画像を作成し、キャンバスに画像オブジェクトを必要とするため、既に解説したように、解決策はcreate_imageを使用することです。

2

短い回答: create_imageを使用する場合は、create_bitmapを使用しないでください。

0

create_bitmap()メソッドにはimage引数がありません。代わりにbitmapという引数があります。

Tkinterでは、TclインタープリタがPythonプロセスに組み込まれて実行されており、すべてのGUIのやりとりがPythonとTclの間を行き来しているという事実から来ています。だから、あなたが得るエラーは、Tclが ".create_bitmap呼び出しの中で何のイメージ - オプションも知らない"と答えたという事実から来ています。

いずれにしても、Jeffさんのように、おそらくcreate_imageメソッドが必要です。

関連する問題