python-3.x - 在按下 Enter 键时将焦点设置在 QPushButton 上
问题描述
在 QLineEdit 中单击输入时,我必须将焦点设置在 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_())
请让我知道是否有一些无需单击即可设置焦点的方法。
解决方案
正如文档指出的那样:
默认按钮
对话框的默认按钮是用户按下 Enter (Return) 时按下的按钮。此按钮用于表示用户接受对话框的设置并希望关闭对话框。使用 QPushButton::setDefault()、QPushButton::isDefault() 和 QPushButton::autoDefault() 来设置和控制对话框的默认按钮。
(强调我的)
所以有两种可能的解决方案:
- 不要使用 QDialog 而是使用 QWidget,或者
- 将 autoDefault 属性设置为 false:
self.button.setAutoDefault(False)
推荐阅读
- azure - 将 Azure Web 应用中的子网站重定向到其他网站
- heroku - 在 Heroku 上运行我的 Symfony 应用程序:““服务器”命名空间中没有定义命令。”
- linux - 查找最后几行有空格的所有文件
- java - 从 Fire 基础数据库中检索的数据显示在微调器的下拉列表中,但所选项目未设置为微调器
- nuget - 为什么我的
nuget标签被覆盖? - html - 使用浮动时保持底部边距
- swift - TableView里面的CollectionView
- c# - 未找到匹配项时从 List<> 返回默认值
- visual-studio - 用于单元测试的每个文件的可执行目标
- ruby-on-rails - 在 Rails 控制台中使用联接的 Update_all 查询