2011-07-13 34 views
1

Ctrl + Hにバインドされたイベントハンドラがあります。これは、Tkinterもと認識し、バックスペースと認識します。 ハンドラの最後にreturn 'break'と書いてありますが、ショートカットの伝播を止めるべきですが、それはうまくいきません! Ctrl + H問題なのですか?tkinterキーボードショートカットを無効にする

は、ここでは、コードです:

def setheading(event=None): 
    x=tkSimpleDialog.askstring('Set as header line', 'Enter an integer 1-5: ') 
    config.text.tag_add('h'+x, SEL_FIRST,SEL_LAST) 
    return 'break' 
+0

ご質問は不明であるカスケード接続のコールバックの詳細については、この1

def k(handler): """decorates an event handler in such a way that the default shortcut command is not triggered same as event.preventDefault() in HTML5 but as a decorator""" def prevent_default(*event): handler(event) return 'break' return prevent_default 

関連の答えのようなユーティリティを使用することができます。コントロールが正しく機能しないのはどこですか?バインディングがあるウィジェット、ダイアログ内のウィジェット、またはどこかのelsで?より具体的に、完全な実例を含めるようにしてください。バインディングを処理する方法はたくさんありますので、必要なだけ多くの詳細が必要です。 –

+0

すべてがテキストウィジェット(名前:config.text)で発生します。ここでctrl-hは実際にsetheading()を実行しますが、同時にINSERT前の最後の文字をバックスペースで返します – alessandro

+0

また、このコミットを見て、自分のプロジェクトでどのように解決したかを見てください。https://github.com/GrosSacASac/WebSpree/コミット/ 40bf9da7346397f31767febe3872aba125cfbd42 –

答えて

0

私の推測では、文のconfig.text.tag_add(...)がキャッチされていないエラーを投げているということです。その場合、return文は決して実行されません。リターンが決して実行されない場合、クラスバインディングの起動を妨げるものは何もありません。

ウィンドウ内でテキストが選択されていないと、エラーがスローされます。

0

おそらく、ルートでCTRL + Hをバインドしました。

イベントがこの順に派遣されているため、この問題が発生した理由は次のとおりです。

  1. ウィジェットのコールバック
  2. Widgetクラスのコールバック*
  3. ルートコールバック

    は(これは*です

    デフォルト行動はから来る)

解決策は、イベントを2回バインドすることです。一度テキストウィジェット自体にreturn "break"を付けてルート上に1回移動すると、他のウィジェットでもコールバックがトリガーされます。ウィジェット上のreturn "break"は、フェーズ2(次の)に移動することを防ぎます。このフェーズ2では、望ましくないデフォルトの動作が発生します。

あなたがdisable tkinter keyboard shortcut (2)

+0

もhttps://stackoverflow.com/a/3513906/3238046 –

関連する問題