widgets qt python-3.x pyqt keypress qlineedit

qt - widgets - qlineedit documentation python



Detectando enter en un QLineEdit o QPushButton (2)

Para el QLineEdit conéctese a la señal returnPressed , si utiliza el método setAutoDefault en su QPushButton s, emita la señal pulsada cuando se presiona Enter en un QPushButton enfocado:

#!/usr/bin/env python #-*- coding:utf-8 -*- import sip sip.setapi(''QString'', 2) sip.setapi(''QVariant'', 2) from PyQt4 import QtGui, QtCore class MyWindow(QtGui.QWidget): def __init__(self, parent=None): super(MyWindow, self).__init__(parent) self.pushButtonOK = QtGui.QPushButton(self) self.pushButtonOK.setText("OK") self.pushButtonOK.clicked.connect(self.on_pushButtonOK_clicked) self.pushButtonOK.setAutoDefault(True) self.lineEditNumber = QtGui.QLineEdit(self) self.lineEditNumber.returnPressed.connect(self.pushButtonOK.click) self.layoutHorizontal = QtGui.QHBoxLayout(self) self.layoutHorizontal.addWidget(self.pushButtonOK) self.layoutHorizontal.addWidget(self.lineEditNumber) @QtCore.pyqtSlot() def on_pushButtonOK_clicked(self): inputNumber = self.lineEditNumber.text() if inputNumber.isdigit(): info = "You selected `{0}`" else: info = "Please select a number, `{0}` isn''t valid!" print info.format(inputNumber) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) app.setApplicationName(''MyWindow'') main = MyWindow() main.show() sys.exit(app.exec_())

He creado una aplicación para un juego, fácil de empezar. Es un juego en el que el sistema elige aleatoriamente un número y un jugador (jugador) intenta averiguar el número. Todo está casi hecho. La aplicación consta de un QLineEdit , una etiqueta y tres botones. Una vez que la aplicación le dice al jugador el rango del número deseado, él / ella escribe un número de apuesta y hace clic en el botón de reproducción. Y de acuerdo con este número, recibe un mensaje acerca de qué tan cerca o lejos está el número deseado del número de apuesta .

Pero me parece un poco desagradable hacer clic en un botón. En su lugar quiero usar la tecla Intro para jugar. Entonces, para lograr esto, todo se reduce a dos preguntas:

  1. ¿Cómo podría uno cambiar a usar Entrar para jugar (quiero decir que necesito saber cuando QLineEdit detecta que se presiona la tecla de entrada)? De esta manera codificaré correctamente para apuntar el método de juego.

  2. Si el botón de reproducción tiene el enfoque, ¿cómo se usa la tecla Intro en este botón? (hacer que el botón acepte la tecla Enter)


QLineEdit emitirá la señal returnPressed() siempre que el usuario presione la tecla Intro mientras está en ella: http://qt-project.org/doc/qt-4.8/qlineedit.html#signals . Puede conectar esta señal a la ranura de click() su botón o llamar directamente a la señal con la que haya hecho click() el click() .