在按Enter时将焦点设置在QPushButton上

时间:2020-03-22 15:42:49

标签: python-3.x pyqt5 setfocus

在QLineEdit中单击Enter时,我必须将重点放在QPushButton上,我能够实现相同的功能,但是问题在于,单击按钮时要执行的操作也会被触发。尽管我没有单击按钮,但仅调用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 :(得分:0)

the docs指出:

默认按钮

对话框的默认按钮是用户单击时按下的按钮 按Enter(返回)。此按钮用于表示用户 接受对话框的设置,并想关闭对话框。采用 QPushButton :: setDefault(),QPushButton :: isDefault()和 QPushButton :: autoDefault()设置和控制对话框的默认值 按钮。

(重点是我的)

因此,有两种可能的解决方案:

  • 不要使用QDialog,而要使用QWidget,或者
  • 将autoDefault属性设置为false:self.button.setAutoDefault(False)