PyQt5中的LineEdit框

时间:2019-04-13 14:33:40

标签: python python-3.x pyqt pyqt5 qlineedit

当我按下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_())

1 个答案:

答案 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)