Подтвердить что ты не робот

Обнаружение входа в QLineEdit или QPushButton

Я создал приложение для игры, которое просто начать. Это игра, в которой система случайно выбирает число, а игрок (игрок) пытается узнать номер. Все почти сделано. Приложение состоит из QLineEdit, метки и трех кнопок. Как только приложение сообщит игроку диапазон требуемого номера, он/она набирает номер ставки и нажимает кнопку воспроизведения. И в соответствии с этим номером он/она получает сообщение о том, как близко или далеко нужный номер находится вдали от bet_number.

Но я считаю, что отвратительно нажимать кнопку. Вместо этого я хочу использовать Enter для воспроизведения. Чтобы достичь этого, дело сводится к двум вопросам:

  • Как можно изменить использование Enter для воспроизведения (я имею в виду, что мне нужно знать, когда QLineEdit обнаруживает нажатие клавиши ввода)? Таким образом, я правильно код, чтобы указать метод воспроизведения.

  • Если кнопка воспроизведения получила фокус, как вы используете клавишу ввода на этой кнопке? (make Button accept Enter key)

4b9b3361

Ответ 1

Для 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_())

Ответ 2

QLineEdit будет излучать сигнал returnPressed() всякий раз, когда пользователь нажимает клавишу ввода в нем: http://qt-project.org/doc/qt-4.8/qlineedit.html#signals. Вы можете подключить этот сигнал к слоту click() или напрямую вызвать то, к чему подключен сигнал вашей кнопки clicked().