2016-10-27 1 views
2

キャンバスに画像ギャラリーを描画しています。ウィンドウのサイズが変更されたら、ギャラリーを再描画する必要があります。
<configure>イベントをバインドして、サイズ変更通知を取得できます。しかし、マウスをドラッグしてウィンドウのサイズを変更すると、あまりにも多くのイベントが発生します。私は変更を保存し、マウスボタンが離されたときにのみギャラリーを再描画したいと思います。
問題: ウィンドウの境界線でプレスまたはリリースイベントを取得する方法が見つかりません。
これは可能なのですか、または枠線は実際にウィンドウの一部ではありませんか?ウィンドウのサイズを変更するときにtkinter get <ButtonRelease-1>

+0

2つのコールバックについて:サイズを変更すると、フラグ 'resizing'をtrueに設定し、マウスボタンを離すと、そのフラグがtrueであるかどうかをチェックします。そうであれば、それを再びfalseに設定して、あなたの行動を実行します。 –

+0

それはまさに私がやろうとしていることです。私が書いたように、マウスのボタンをウィンドウの境界線(ウィンドウのサイズを変更するためにドラッグする)にリリースすると、リリースイベントが作成されないようです。 –

答えて

4

ウィンドウの境界線でマウスをクリックしたときにユーザーがマウスを離したときを知ることはできません。ボーダーはウィンドウの一部ではなく、Tkinterは作成するウィジェット以外のイベントについてほとんど知識がありません。

最も簡単な解決策は、再描画に遅延を追加することです。 <Configure>イベントでは、保留中の再描画をキャンセルし、新しいものが1,2秒間に発生するようにスケジュールします。

class Application(...): 
    def __init__(self, ...): 
     ... 
     self._after_id = None 
     self.bind("<Configure>", self.schedule_redraw) 
     ... 

    def schedule_redraw(self, event): 
     if self._after_id: 
      self.after_cancel(self._after_id) 
     self._after_id = self.after(2000, self.redraw) 
+0

ありがとう!私はスレッドからポーリングすることでそのようなことをしていました。関数の後のTkintersはもっと簡単に見えます。そして、国境についての実際の質問に答えることに感謝します。 –

関連する問題