web-dev-qa-db-fra.com

Détection d'une entrée sur un QLineEdit ou QPushButton

J'ai créé une application pour un jeu, simple à démarrer. C'est un jeu dans lequel le système choisit au hasard un numéro et un joueur (joueur) essaie de trouver le numéro. Tout est presque terminé. L'application se compose d'un QLineEdit, d'une étiquette et de trois boutons. Une fois que l'application indique au joueur la plage du nombre voulu, il/elle tape un numéro_bet et clique sur le bouton de lecture. Et selon ce nombre, il/elle reçoit un message indiquant à quelle distance ou à quelle distance le nombre souhaité est éloigné du bet_number .

Mais je trouve ça un peu dégoûtant de cliquer sur un bouton. Au lieu de cela, je veux utiliser touche Entrée pour jouer. Pour y parvenir, cela se résume à deux questions spécifiques:

  1. Comment pourrait-on changer pour utiliser Enter pour jouer (je veux dire que j'ai besoin de savoir quand QLineEdit détecte que la touche Entrée est enfoncée)? De cette façon, je coderai correctement pour indiquer la méthode de lecture.

  2. Si le bouton de lecture a le focus, comment utilisez-vous la touche Entrée sur ce bouton? (faire en sorte que le bouton accepte la touche Entrée)

28
arkero24

Pour le QLineEdit connectez-vous au signal returnPressed , si vous utilisez le setAutoDefault sur votre QPushButton s vous émettez le signal clicked lorsque Enter est pressé sur un focus QPushButton :

#!/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_())
44
user1006989

QLineEdit émettra le signal returnPressed() chaque fois que l'utilisateur appuiera sur la touche entrée pendant qu'il y est: http://qt-project.org/doc/qt-4.8/qlineedit. html # signaux . Vous pouvez soit connecter ce signal à la fente click() de votre bouton, soit appeler directement le signal clicked() de votre bouton auquel il a été connecté.

12
rainer