当我按下lineEdit框中的Enter键时,将执行Enter_LineEdit()函数和click_Edit()函数。为什么要执行click_Edit()函数?一定不能!
我希望有人向我解释为什么这样工作?
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow,QApplication,QPushButton,QDialog,QHBoxLayout,QLabel,QWidget,QLineEdit
from PyQt5 import QtGui
from PyQt5 import QtCore
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setGeometry(100,100,600,400)
self.CreateBtn()
self.show()
def CreateBtn(self):
button = QPushButton("Second Window", self)
button.setGeometry(QtCore.QRect(30,100,200,80))
button.setIconSize(QtCore.QSize(70,70))
button.clicked.connect(self.SecWin)
def SecWin(self):
self.d = SecondWindow()
self.d.Create_SecWin()
self.d.Create_Object()
self.d.Create_Layout()
class SecondWindow(QDialog):
def Create_SecWin(self):
self.setGeometry(600,360,400,100)
self.show()
def Create_Object(self):
self.btnEdit = QPushButton("Edit",self)
self.btnEdit.clicked.connect(self.click_Edit)
self.labelSearch = QLabel("Search:",self)
self.lineEdit = QLineEdit(self)
self.lineEdit.returnPressed.connect(self.enter_LineEdit)
def Create_Layout(self):
hbox1 = QHBoxLayout()
hbox1.addWidget(self.btnEdit)
hbox1.addWidget(self.labelSearch)
hbox1.addWidget(self.lineEdit)
self.setLayout(hbox1)
def click_Edit(self):
print("Philip")
def enter_LineEdit(self):
print("Karl")
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec_())
答案 0 :(得分:0)
如果您查看QPushButton的autoDefault属性的文档:
此属性保存按钮是否为自动默认按钮
如果此属性设置为true,则按钮为自动 默认按钮。
在某些GUI样式中,默认按钮带有额外的框架 周围最多3个像素或更多。 Qt自动保留此空间 自动默认按钮不存在,即自动默认按钮可能具有 稍大一些的提示。
对于具有QDialog的按钮,此属性的默认值为true 父母否则默认为false。
有关默认和自动默认方式的详细信息,请参见默认属性 互动。
也来自default属性:
[...]
此属性设置为true的按钮(即对话框的默认按钮 按钮,)将在用户按下Enter键时自动被按下, 有一个例外:如果autoDefault按钮当前具有焦点,则 按下autoDefault按钮。 当对话框具有autoDefault按钮时 但没有默认按钮,按Enter键将按 当前具有焦点的autoDefault按钮,或者如果没有按钮 焦点,焦点链中的下一个autoDefault按钮。。
[...]
也就是说,由于所有QPushButtons的autoDefault属性都为True,所以在QDialog中按下回车键时,某些QPushButtons将被按下,因此解决方案是将其设置为False:
self.btnEdit = QPushButton("Edit", self)
self.btnEdit.setAutoDefault(False)