Окно LineEdit в PyQt5 - PullRequest
       16

Окно LineEdit в PyQt5

1 голос
/ 13 апреля 2019

Когда я нажимаю клавишу Enter в поле lineEdit, выполняет функцию 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 голосов
/ 13 апреля 2019

Если вы просматриваете документы свойства autoDefault QPushButton:

Это свойство определяет, является ли кнопка кнопкой автоматического выбора по умолчанию

Если для этого свойства установлено значение true, то кнопка автоматически кнопка по умолчанию.

В некоторых стилях GUI кнопка по умолчанию рисуется с дополнительной рамкой вокруг него, до 3 пикселей и более. Qt автоматически сохраняет это место вокруг кнопок по умолчанию, то есть кнопки по умолчанию могут иметь немного больший размер подсказки.

Это свойство по умолчанию имеет значение true для кнопок, имеющих QDialog родитель; в противном случае значение по умолчанию равно false.

См. Свойство по умолчанию для получения подробной информации о том, как по умолчанию и авто-по умолчанию взаимодействуют между собой.

А также из свойства default :

[...]

Кнопка с этим свойством, установленным в true (то есть диалоговое окно по умолчанию кнопка,) будет автоматически нажиматься, когда пользователь нажимает ввод, с одним исключением: если кнопка autoDefault в данный момент имеет фокус, кнопка автозадания нажата. Когда в диалоге есть кнопки автозадания но нет кнопки по умолчанию, нажатие Enter будет либо кнопка autoDefault, которая в данный момент имеет фокус, или если ни одна кнопка не имеет focus, следующая кнопка autoDefault в цепочке фокусировки .

[...]

То есть, некоторые из QPushButtons будут нажиматься при нажатии клавиши ввода в QDialog, поскольку все QPushButton имеют свойство autoDefault в True, поэтому решение состоит в том, чтобы установить его в False:

self.btnEdit = QPushButton("Edit", self)
self.btnEdit.setAutoDefault(False)
...