2013-03-22 6 views
16

पर प्रवेश का पता लगाने के लिए मैंने शुरू करने के लिए सरल, एक गेम के लिए एक ऐप बनाया है। यह एक ऐसा गेम है जिसमें सिस्टम यादृच्छिक रूप से एक नंबर चुनता है और एक गेमर (प्लेयर) संख्या को खोजने का प्रयास करता है। सब कुछ लगभग किया जाता है। ऐप में QLineEdit, एक लेबल और तीन बटन होते हैं। एक बार ऐप खिलाड़ी को वांछित संख्या की श्रेणी बताता है, तो वह bet_number टाइप करता है और प्ले बटन पर क्लिक करता है। और इस संख्या के अनुसार उसे bet_number से वांछित संख्या कितनी करीब या दूर है, इस बारे में एक संदेश प्राप्त होता है।एक QLineEdit या QPushButton

लेकिन मुझे बटन पर क्लिक करने के लिए थोड़ा घृणित लगता है। इसके बजाय मैं का उपयोग करना चाहता हूं खेलने के लिए कुंजी दर्ज करें। तो इस लक्ष्य को हासिल करने के लिए, यह नीचे आता है विशेष रूप से दो सवाल:

  1. कैसे उपयोग करने के लिए एक परिवर्तन खेलने के लिए दर्ज कर सकता है (मेरा मतलब है मैं जानता हूँ कि जब QLineEdit पहचान लेता दर्ज कुंजी दबाने की जरूरत है)? इस तरह मैं प्ले विधि को इंगित करने के लिए ठीक से कोड करूंगा।

  2. यदि प्ले बटन को फोकस मिल गया है, तो आप इस बटन पर एंटर कुंजी का उपयोग कैसे करते हैं? http://qt-project.org/doc/qt-4.8/qlineedit.html#signals:

+0

http: // stackoverflow .com/प्रश्न/2078842/qlineedit-how-to-handle-up-and-down-arrows –

उत्तर

11

QLineEdit संकेत returnPressed() उत्सर्जित करेगा जब भी उपयोगकर्ता कुंजी दर्ज प्रेस उस में है, जबकि (बनाने के बटन स्वीकार कुंजी दर्ज करें)। आप या तो इस सिग्नल को अपने बटन के click() स्लॉट से कनेक्ट कर सकते हैं या सीधे अपने बटन के clicked() सिग्नल से कनेक्ट होने पर सीधे कॉल कर सकते हैं।

+0

आपके उत्तर के लिए धन्यवाद मुझे यह मिला है: कनेक्ट करें (self.txtNumGetter, SIGNAL (returnPressed()), self.btnPlayGame, सिग्नल (क्लिक किया())); लेकिन यह काम नहीं करता है। या इस कोड लाइन को कहाँ लिखा जाना चाहिए? – arkero24

+0

सिग्नल हमेशा स्लॉट से जुड़े रहना होगा। 'क्लिक किया गया()' 'QPushButton' का * * सिग्नल * है, इसलिए, आप इसे किसी भी चीज़ से कनेक्ट नहीं कर सकते --- आपको * स्लॉट *' क्लिक() 'के बजाय (अंत में 'ed' के बिना उपयोग करना होगा)। – rainer

25

QLineEdit के लिए, returnPressed सिग्नल से कनेक्ट करता है, तो आप अपने QPushButton रों पर setAutoDefault विधि का उपयोग आप clicked संकेत फेंकना जब दर्ज एक केंद्रित 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

मुझे आपके समर्थन के लिए धन्यवाद दस लाख कहना चाहिए। अंत में मैंने स्लीट के साथ लाइनडिट को एक सिग्नल 'रिटर्नप्रेस' के माध्यम से कनेक्ट करके समस्या हल की ... self.txtCode.returnPressed.connect (self.mySlot) इस तरह मेरा कोड अब पूरी तरह कार्यात्मक है। धन्यवाद दोस्तों!! – arkero24

+1

चेक मार्क पर क्लिक करके इस जवाब को स्वीकार करने पर विचार करें। – Charlie

+0

किसी भी विचार को QComboBox के साथ ऐसा करने का तरीका है? – TheInitializer

संबंधित मुद्दे