0

私は小さなpyqtプログラムを書いています。メインウィンドウが矢印の動きに反応するようにしたい。これを処理するイベントをMainGuiクラスに追加しましたkeyPressEventKey_Upのような特定のボタンを押さない限り、イベントは正常に機能しKey_Downます。それぞれの後にフォーカスを与えようとしましたが、ボタン/コンボボックスをダブルクリックする必要があります。QComboBoxmainGuimainGuipaintEvent

次に、を使用してMousePressEvent、特定の要素がマウスの下にあるかどうかを確認しようとしました。これは、コンボボックスでは問題なく機能しますが、ボタンでは機能しません。

では、重要なイベントを に向けmainGuiたり、フォーカスを与えるにはどうすればよいQButtonsでしょうか?

4

1 に答える 1

0

以前eventFilterは、マウスが に入るタイミングを特定しQPushButtonてフォーカスを与えていました。

def eventFilter(self,source,event):
  if event.type() == QtCore.QEvent.HoverMove:
     if self.execButton.underMouse():
        self.execButton.setFocus()
        self.keepFocus=False
     else :
        self.keepFocus=True

keepFocus__init__クラスの関数で初期化したフラグです。paintEventこの部分を関数に追加しました

    if self.keepFocus:
        self.setFocus()
    else:
        self.keepFocus = True

今、私はフォーカスを に保ち、MainGuiマウスがボタンの上にあるときにのみボタンにフォーカスを与えます。別のアクション (マウス ボタンやキーボードのキーを押すなど) を行うと、フォーカスが に戻りMainGuiます。これにより、いくつかのバグが発生します (たとえば、最初の応答の前にキーボードのキーを 2 回押す必要があります) が、これは実行可能です。

于 2013-08-20T20:19:18.163 に答える