47

簡単に開始できるゲーム用のアプリを作成しました。システムがランダムに数字を選び、ゲーマー(プレイヤー)がその数字を見つけようとするゲームです。すべてがほぼ完了しました。アプリはQLineEdit、ラベル、3 つのボタンで構成されます。アプリが希望する数字の範囲をプレーヤーに伝えると、プレーヤーはbet_numberを入力して再生ボタンをクリックします。そして、この数に応じて、希望する数がbet_numberからどれだけ離れているかについてのメッセージを受け取ります。

しかし、ボタンをクリックするのは少し嫌だと思います。代わりに、 Enter キーを使用して再生したいと考えています。したがって、これを達成するには、具体的には次の 2 つの質問に行き着きます。

  1. QLineEditEnter を使用して再生するように変更するにはどうすればよいですか (つまり、Enterキーが押されたことを検出する必要があるということです)。このように、play メソッドを指すように適切にコーディングします。

  2. 再生ボタンにフォーカスがある場合、このボタンで Enter キーをどのように使用しますか? (ボタンに Enter キーを受け入れるようにします)

4

3 に答える 3

62

信号へのQLineEdit接続用。returnPressed

setAutoDefaultまたは、 でメソッドを使用する場合は、フォーカスされた上で が押されたときに信号QPushButtonを発します:clickedEnterQPushButton

#!/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_())
于 2013-03-22T10:16:41.150 に答える
19

QLineEditreturnPressed()ユーザーがその中にいる間にエンターキーを押すたびにシグナルを発します: http://qt-project.org/doc/qt-4.8/qlineedit.html#signals . この信号をボタンのclick()スロットに接続するか、ボタンのclicked()信号が接続されていたものを直接呼び出すことができます。

于 2013-03-22T10:15:43.960 に答える