2013-03-22 10 views
16

Ich habe eine App für ein Spiel gebaut, einfach zu starten. Es ist ein Spiel, bei dem das System zufällig eine Nummer wählt und ein Spieler (Spieler) versucht, die Nummer herauszufinden. Alles ist fast fertig. Die App besteht aus einem QLineEdit, einem Label und drei Buttons. Sobald die App dem Spieler den Bereich der gewünschten Nummer mitteilt, tippt er/sie eine Wettnummer ein und klickt auf die Play-Taste. Und nach dieser Nummer erhält er eine Nachricht darüber, wie weit oder weit die gesuchte Nummer von der Betnummer entfernt ist.Detecting Eingabe auf einem QLineEdit oder QPushButton

Aber ich finde es ein wenig ekelhaft, einen Knopf zu klicken. Stattdessen möchte ich verwenden, um die Taste zu spielen. So dies zu erreichen, kommt es auf speziell zwei Fragen:

  1. Wie könnte eine Änderung eingeben, um mit zu spielen (ich meine, ich brauche wissen, wann QLineEdit erkennt Enter-Taste gedrückt wird)? Auf diese Weise werde ich richtig codieren, um auf die Spielmethode zu zeigen.

  2. Wenn der Play-Button den Fokus hat, wie benutzt man die Enter-Taste auf diesem Button? (Make-Taste Schlüssel accept eingeben)

+0

http: // Stackoverflow .com/questions/2078842/qlineedit-how-to-handle-up-und-down-arrows –

Antwort

11

QLineEdit das Signal returnPressed() emittieren wird, wenn der Benutzer die Enter-Taste drückt, während in ihm: http://qt-project.org/doc/qt-4.8/qlineedit.html#signals. Sie können dieses Signal entweder an den Steckplatz click() Ihrer Taste anschließen oder direkt anrufen, was auch immer an dem clicked()-Signal Ihrer Taste angeschlossen war.

+0

Danke für Ihre Antwort Ich habe das: connect (self.txtNumGetter, SIGNAL (returnPressed()), self.btnPlayGame, SIGNAL (angeklickt())); aber es funktioniert nicht. Oder wo muss diese Codezeile geschrieben werden? – arkero24

+0

Signale müssen immer mit Steckplätzen verbunden sein. 'clicked()' ist ein * Signal * von 'QPushButton', jedoch können Sie nichts verbinden - Sie müssten stattdessen den * slot *' click() 'verwenden (ohne die Endung' ed'). – rainer

25

Für die QLineEdit eine Verbindung zum returnPressed Signal, wenn Sie die setAutoDefault Methode auf Ihrem QPushButton s verwenden emittieren Sie das clicked Signal, wenn Geben Sie auf einem fokussierten gedrückt 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_()) 
+1

Ich muss tausend Dank für Ihre Unterstützung sagen. Endlich habe ich das Problem gelöst, indem ich das Lineedit über ein Signal 'returnPressed' mit dem Slot verbunden habe ... self.txtCode.returnPressed.connect (self.mySlot) Damit ist mein Code nun voll funktionsfähig. Danke Leute!! – arkero24

+1

Sie können diese Antwort akzeptieren, indem Sie auf das Häkchen klicken. – Charlie

+0

eine Idee wie man das mit einer QComboBox macht? – TheInitializer