我已经为游戏创建了一个应用程序,易于上手。在这种游戏中,系统会随机选择一个数字,而玩家(玩家)会尝试找出该数字。一切都快完成了。该应用程序由QLineEdit,标签和三个按钮组成。一旦应用程序告知玩家想要的数字范围,他/她将输入bet_number并单击“播放”按钮。然后,根据这个数字,他/她会收到一条消息,告知想要的数字离bet_number多近或远。

但是我发现单击按钮有点恶心。相反,我想使用输入键进行播放。因此,要实现这一目标,可以归结为以下两个问题:

  • 如何使用Enter进行播放(我的意思是我需要知道QLineEdit何时检测到按下Enter键)?这样,我将正确编码以指向play方法。
  • 如果焦点位于播放按钮,则如何使用该按钮上的Enter键? (使Button接受Enter键)
  • 最佳答案

    对于 QLineEdit ,连接到 returnPressed 信号。

    或者,如果在 setAutoDefault 上使用 QPushButton 方法,则在聚焦的 clicked 上按Enter时,会发出 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_())
    

    07-28 01:35
    查看更多