2017-11-14 3 views
-2

tkinter、canvas、itemconfigで奇妙な動作があります。Tkinter rectangle itemconfig fill updateが毎回動作しません

私は小さなウィンドウを持っています。キャンバスには長方形があり、各四角形はパレットの色を示しています。 &右マウスボタンのイベントを設定しました.LMBは色を選択し、RMBは選択された色をクリックした色を入れ替えます。バインドイベントは正常に動作しています。このプロセス中に実行される他の操作が行われるため(実際のパレットカラーがスワップされます)。

最初のLMB & RMBをクリックすると、四角形の「塗りつぶし」は更新されません(または少なくとも画面には更新されません)が、2回目のRMBをクリックすると色の変化が反映されます色は2回スワップされます)。

長方形を更新するコードは次のとおりです。

app.paletteCanvas.itemconfig(app.paletteColorBoxes[newColor], fill=transformColor(app,app.drawColor)) 
app.paletteCanvas.itemconfig(app.paletteColorBoxes[app.drawColor], fill=transformColor(app,newColor)) 

アプリは、paletteCanvasはapp.paletteColorBoxesに私は長方形の指数を維持し、「パレットウィンドウ」にパックされたキャンバスメインアプリケーションです変更するには、newColorとapp.drawColorは元の色と色です。最後にtransformColorは、(R、G、B)の事柄を#RRGGBB文字列に変換してitemconfigが理解できるようにします。

したがって、ルーチンは最初に呼び出されたときにリフレッシュは行われませんが、2番目の呼び出しではリフレッシュが行われる点を除いて、すべてうまくいくようです。

私はあらゆる種類の.update()と.update_idletasks()を試しましたが、運はありませんでした。完全にこの動作をテストする

あなたはで、完全なアプリケーションを確認することができます。

https://github.com/zayamatias/retrotool

誤動作機能あなたが画像を開く必要がありretrofunctions.py/swapColor

であり、いくつかをクリックしてください色を選択し、 "タイルビューア/エディタ"を選択すると、ツールが完了した後(おそらく失敗する可能性がありますが、まだWIP)、パレットウィンドウが表示されます。

ありがとうございます!

私はそれが役立つ場合、私はPython 3.6.3です。

+1

完全なアプリケーションへのリンクを投稿しないでください。誰も何百、何千ものコード行を歩き回りたくはありません。代わりに、小さな[mcve]を作成します。 –

答えて

0

最後に、問題はtkinterではなく、itemconfigメソッドに渡された値が混在していました...私の悪い!

関連する問題