2013-03-22 20 views
16

Zbudowałem aplikację do gry, którą można łatwo uruchomić. Jest to gra, w której system losowo wybiera liczbę, a gracz (gracz) próbuje znaleźć numer. Wszystko jest prawie gotowe. Aplikacja składa się z QLineEdit, etykiety i trzech przycisków. Gdy aplikacja poinformuje gracza o zakresie poszukiwanych numerów, wpisuje numer bet_number i klika przycisk odtwarzania. Zgodnie z tym numerem otrzyma wiadomość o tym, jak blisko lub daleko poszukiwana liczba znajduje się z dala od bet_number.Wykrywanie wejścia na QLineEdit lub QPushButton

Ale kliknięcie przycisku sprawia mi trochę obrzydzenia. Zamiast tego chcę użyć Wpisz klucz, aby zagrać. Tak aby to osiągnąć, to sprowadza się do konkretnie dwa pytania:

  1. Jak można zmiana za pomocą Enter, aby odtworzyć (to znaczy muszę wiedzieć, kiedy QLineEdit wykrywa naciśnięciu klawisza Enter)? W ten sposób będę poprawnie kodował, aby wskazać metodę odtwarzania.

  2. Jeśli przycisk odtwarzania ma fokus, w jaki sposób użyć klawisza Enter na tym przycisku? (Marka przycisk Akceptuj klawisz Enter)

+0

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

Odpowiedz

11

QLineEdit wyemituje sygnał returnPressed() gdy użytkownik naciśnie klawisz Enter, aw nim: http://qt-project.org/doc/qt-4.8/qlineedit.html#signals. Możesz podłączyć ten sygnał do gniazda swojego przycisku: click() lub bezpośrednio wywołać sygnał, do którego podłączony jest twój sygnał przycisku clicked().

+0

Dzięki za odpowiedź Mam to: connect (self.txtNumGetter, SIGNAL (returnPressed()), self.btnPlayGame, SIGNAL (kliknięty())); ale to nie działa. Lub gdzie musi być zapisana ta linia kodu? – arkero24

+0

Sygnały zawsze muszą być podłączone do gniazd. 'clicked()' jest * sygnałem * 'QPushButton', jednak nie można do niego niczego podłączyć --- musiałbyś użyć * slot *' click() 'zamiast (bez zakończenia' ed'). – rainer

25

Dla QLineEdit podłączyć do sygnału returnPressed, jeśli używasz metody setAutoDefault na własną QPushButton s ty emitować sygnał clicked gdy Wprowadź jest wciśnięty na skupioną 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

Muszę podziękować milion za wsparcie. W końcu rozwiązałem problem, łącząc lineedit z gniazdem za pomocą sygnału "returnPressed" ... self.txtCode.returnPressed.connect (self.mySlot) W ten sposób mój kod jest teraz w pełni funkcjonalny. Dzięki chłopaki!! – arkero24

+1

Rozważ zaakceptowanie tej odpowiedzi, klikając znacznik wyboru. – Charlie

+0

jakikolwiek pomysł, jak to zrobić z QComboBox? – TheInitializer

Powiązane problemy