場合は、これを達成するために、いくつかの異なる方法がありますが、素晴らしいことです。 に与えられたウィジェットのすべてのイベントを聴くための汎用的な方法、それにinstall an event-filterにある:
また
class MainmWindow(QtGui.QMainWindow):
def __init__(self):
...
self.lineEdit = QtGui.QLineEdit(self.frame)
self.lineEdit.installEventFilter(self)
def eventFilter(self, source, event):
if source is self.lineEdit:
if event.type() == QtCore.QEvent.KeyRelease:
print('key release:', event.key())
# the following line will eat the key event
# return True
return super(MainmWindow, self).eventFilter(source, event)
、あなたはサブクラスウィジェットは、関連するイベントハンドラを再実装、およびカスタムを発することができます信号:
class LineEdit(QtGui.QLineEdit):
keyReleased = QtCore.pyqtSignal(int)
def keyReleaseEvent(self, event):
self.keyReleased.emit(event.key())
super(LineEdit, self).keyReleaseEvent(event)
class MainmWindow(QtGui.QMainWindow):
def __init__(self):
...
self.lineEdit = LineEdit(self.frame)
self.lineEdit.keyReleased.connect(self.handleKeyRelease)
def handleKeyRelease(self, key):
print('key release:' key)
この詳細ハック変動が直接メソッドを上書きすることである。
class MainmWindow(QtGui.QMainWindow):
def __init__(self):
...
self.lineEdit = QtGui.QLineEdit(self.frame)
self.lineEdit.keyReleaseEvent = self.handleKeyRelease
def handleKeyRelease(self, event):
print('key release:', event.key())
QtGui.QLineEdit.keyReleaseEvent(self.lineEdit, event)
なおデフォルトのイベント処理を呼び出さない場合は、ベースクラスメソッドの呼び出しを省略できます。
私はこのハックな方法が好きです:D、もう1つの質問があります。このキーリリースイベントは 'Ctrl'と 'a'の2つのキーコードを返すので、 "Ctrl + a"などの2つのキーをバインドすることは可能ですか?または、この目的のために、 'keyRelase'の代わりに使用する別のイベントがあります。 –
@DušanAtanacković。必要なのは、単純なif文で、好きなキーの組み合わせがあるかどうかを調べるだけです: 'event.modifiers()== QtCore.Qt.ControlModifierとevent.key()== QtCore.Qt.Key_A:'。 – ekhumoro
私はこの質問は以前のものとは関係ないことを知っていますが、私はこの質問は私が現在開発しているプログラムと関連しているので、どのOSを使用しているのだろうと思っています。 Linux用のクイックインストーラですので、もしあなたがそのプロジェクトで面白いのであれば、ここで確認できます。https://github.com/Dusan92Atanackovic/luqi.git に関して –