2016-03-23 5 views
1

Dieses spezifische Fenster hat 2 QLineEdits: eines mit dem Namen "User" und das andere mit "Password". Unter ihnen befindet sich eine Tastatur mit vielen QPushButtons. Jetzt muss ich die Methode, die mit diesen Tasten verbunden ist, anweisen, den entsprechenden Buchstaben oder die Nummer in dem ausgewählten QLineEdit zu drucken, und es fällt mir schwer, das Signal zu erhalten, für das QLineEdit gerade ausgewählt ist.Pyqt: Wie bekomme ich ein Signal, dass QLineEdit im Fokus ist?

Wie bekomme ich dieses Signal? Die Anwendung startet mit "Benutzer" fokussiert: self.User.setFocus()

Vielen Dank.

Antwort

2

Standardmäßig erhalten die Schaltflächen den Fokus, wenn Sie darauf klicken. Sie können dies ändern, indem Sie ihre Fokusrichtlinie auf NoFocus festlegen. Auf diese Weise verlieren Ihre Line-Edits nicht den Fokus, wenn Benutzer auf die Schaltflächen klicken.

button.setFocusPolicy(QtCore.Qt.NoFocus) 

Solange die LineEdit konzentrieren musste, wenn die Schaltfläche geklickt wurde, können Sie das fokussierte Widget in Ihrem Tastenhandler wie folgt zu erreichen:

lineedit = QtGui.QApplication.focusWidget() 

Sie könnten das fokussierte Widget überprüfen, um sicherzustellen ist eines der beiden lineedit-Widgets und aktualisiere dann ihren Text entsprechend.

+0

Vielen Dank, das ist sehr hilfreich. Mit 'lineedit = QtGui.QApplication.focusWidget()' bekomme ich: '', woher bekomme ich den Namen des Objekts? –

+0

Oh, ich habe es, ist so einfach wie das Hinzufügen von '.objectName()' zu der Zeile, wie in 'lineedit = QtGui.QApplication.focusWidget(). ObjectName()' –