Détection d'entrée sur un Qlineeedit ou un QPushButton

j'ai construit une application pour un jeu, simple à démarrer. C'est un jeu dans lequel le système choisit au hasard un nombre et un gamer (joueur) essaie de trouver le nombre. Tout est presque fini. L'application se compose d'un QLineEdit, une étiquette et trois boutons. Une fois que l'application indique au joueur la portée du nombre voulu, il / elle tape un bet_number et clique sur le bouton play. Et selon ce nombre, il / elle reçoit un message sur la façon dont proche ou loin le nombre voulu est éloigné de la bet_number.

Mais je trouve ça un peu dégoûtant de cliquer sur un bouton. Au lieu de cela je veux utiliser entrer la touche pour jouer. Pour y parvenir, il faut donc se poser deux questions spécifiques:

  1. Comment changer L'utilisation de Enter pour jouer (je veux dire que j'ai besoin de savoir quand QLineEdit détecte la touche entrée est pressée)? De cette façon, je vais coder correctement pour pointer la méthode de jeu.

  2. si le bouton play a la mise au point, comment faire vous utilisez la touche Entrée sur ce bouton? (Bouton accepter la touche Entrée)

21
demandé sur Cœur 2013-03-22 06:16:43

2 réponses

pour le QLineEdit se connecter à l' returnPressed signal, si vous utilisez le setAutoDefault dans votre QPushButtons vous émettez l' clicked signal quand Entrée est pressé sur un 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_())
32
répondu 2013-03-22 10:16:41

QLineEdit émettra le signal returnPressed() chaque fois que l'utilisateur appuie sur la touche Entrée:http://qt-project.org/doc/qt-4.8/qlineedit.html#signals