PyQt und: wie empfangen von Tastatur-Ereignisse in eine Unterklasse QWidget?
Vielleicht ist dies schon oft gefragt, aber ich kann nicht finden eine Lösung.
Ich habe ein Dialogfeld, in:
class PostDialog(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.ui = Ui_Dialog() #code from designer!!
self.ui.setupUi(self)
self.ui.plainTextEdit = ContentEditor()
Dieser dialog hat eine QPlainTextEdit vom designer.
Muss ich überschreiben, keyPress und keyRelease, dass QPlainTextEdit.
So, ich habe es Unterklassen:
class ContentEditor(QtGui.QPlainTextEdit):
def __init__(self, parent=None):
QtGui.QPlainTextEdit.__init__(self, parent)
def keyPressEvent(self, event):
print "do something"
aber ContentEditor.keyPressEvent wird nie aufgerufen! Warum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Empfehle ich installEventFilter für diesen Zweck:
Diese würde wie folgt Aussehen:
Was Sie versuchen zu erreichen, ist besser getan, von Förderung im Qt Designer die QPlainTextEdit widget auf deiner Unterklasse ContentEditor.
Qt-Dokumentation
In den "Gefördert Widgets" - Dialog:
"Die Förderung class name": ContentEditor
"Header-Datei": your_python_module_name.h
Sein können, müssen Sie rufen Sie die Methode
setFocusPolicy
von QWidget erhalten ein KeyPress-Ereignis.Aus der API-docs QWidget für die Methode keyPressEvent:
Werden Sie wahrscheinlich nur brauchen, tauschen Sie die folgenden zwei Zeilen:
Wenn du schreibst es so:
Sie sicherstellen, dass Ihre benutzerdefinierten widget wird gebunden, bevor die UI-setup bekommt. Sonst bist du nur ersetzen einer Referenz zu einem bereits initialisierten Objekt.