Настройка фокуса на QPushButton при нажатии Enter - PullRequest
0 голосов
/ 22 марта 2020

Я должен установить фокус на QPushButton после нажатия кнопки ввода в QLineEdit, и я могу добиться того же, но проблема в том, что действие, которое должно быть выполнено при нажатии кнопки, также запускается. Хотя я не нажимаю кнопку, а только вызываю setFocus (). Вот код:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QPushButton, QMessageBox, QLineEdit, QDialog
import sys, time


class App(QDialog):
    def __init__(self):
        super().__init__()
        self.title = 'PushButton Set Focus'
        self.left = 200
        self.top = 200
        self.width = 320
        self.height = 200
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.lineEdit = QLineEdit('Press Enter', self)
        self.lineEdit.move(100, 30)
        self.lineEdit.returnPressed.connect(self.__setFocusOnButton)

        self.button = QPushButton('Click me', self)
        self.button.move(100, 70)
        self.button.setAutoDefault(True)
        self.button.clicked.connect(self.on_click)

        self.show()

    def on_click(self):
        print('Button Clicked')

    def __setFocusOnButton(self):
        self.button.setFocus()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

Пожалуйста, дайте мне знать, если есть какие-то методы для setFocus без нажатия кнопки.

1 Ответ

0 голосов
/ 22 марта 2020

Как документы указывают:

Кнопка по умолчанию

Кнопка диалога по умолчанию - это кнопка, которая нажимается, когда пользователь нажимает Enter ( Возвращение) . Эта кнопка используется для обозначения того, что пользователь принимает настройки диалога и хочет закрыть диалог. Используйте QPushButton :: setDefault (), QPushButton :: isDefault () и QPushButton :: autoDefault () для установки и управления кнопкой по умолчанию для диалогового окна.

(выделено)

Таким образом, есть 2 возможных решения:

  • Не использовать QDialog, но QWidget, OR
  • установить для свойства autoDefault значение false: self.button.setAutoDefault(False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...