В диалоговом окне «Новая запись» есть кнопка, которая при нажатии заполняет QLineEdits значениями по умолчанию.
Я хотел бы реализовать функцию, чтобы при наведении курсора мыши на эту кнопку по умолчанию вы получали предварительный просмотр (вероятно, через setPlaceholderText) того, что будет установлено для QLineEdits.
После поиска решения я наткнулся на это решение: Как перехватить сигнал наведения и отпускания мыши PyQt5
для подкласса PushButton и переопределения EnterEvent и LeaveEvent.
Однако я создал свой графический интерфейс с помощью Qt Designer и немного не понимаю, как я могу применить это решение, поскольку QPushButton создается внутри файла .ui дизайнера, где я не могу вносить изменения...
Вот фрагмент файла .ui при преобразовании в .py с pyuic5
Код: Выделить всё
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
self.pushButton_contact_defaut = QtWidgets.QPushButton(self.groupBox_client)
self.pushButton_contact_defaut.setGeometry(QtCore.QRect(80, 130, 165, 22))
self.pushButton_contact_defaut.setMouseTracking(True)
self.pushButton_contact_defaut.setAutoDefault(False)
self.pushButton_contact_defaut.setObjectName("pushButton_contact_defaut")
А вот также выдержка из моего основного файла Python, где я «обрабатываю» все соединения и логику.
Я явно не слишком знаком с Python и PyQt (или чем-то связанным с ними). к программированию на самом деле!)
Есть ли способ «переопределить» кнопку PushButton изнутри моего кода и является ли это лучшим способом решения проблемы, или я что-то еще упускаю?
Код: Выделить всё
class NewEntry(NE_Base, NE_Ui):
def __init__(self):
super().__init__()
QDialog.__init__(self, parent=main_window)
self.ui = NE_Ui()
self.ui.setupUi(self)
self.setWindowModality(0)
self.ui.pushButton_contact_defaut.clicked.connect(self.contact_defaut)
РЕДАКТИРОВАТЬ: Основываясь на ответе musicamante, я заставил его работать нормально для моего app, где у меня есть 2 кнопки, которые «заполняют» разные строкиEdit, выполняя следующие действия.
Я применил .installEventFilter(self) к обеим кнопкам pushButton и добавил:
Код: Выделить всё
def eventFilter(self, source, event):
if event.type() == QtCore.QEvent.Enter and source == self.ui.pushButton_contact_defaut:
self.ui.contact_text.setPlaceholderText(self.contact_base)
self.ui.cell_text.setPlaceholderText(self.cell)
self.ui.email_text.setPlaceholderText(self.courriel)
if event.type() == QtCore.QEvent.Enter and source == self.ui.pushButton_copy_adress:
self.ui.street_text.setPlaceholderText(self.street)
self.ui.city_text.setPlaceholderText(self.city)
self.ui.postal_text.setPlaceholderText(self.postal)
elif event.type() == QtCore.QEvent.Leave:
self.ui.contact_text.setPlaceholderText('')
self.ui.cell_text.setPlaceholderText('')
self.ui.email_text.setPlaceholderText('')
self.ui.street_text.setPlaceholderText('')
self.ui.city_text.setPlaceholderText('')
self.ui.postal_text.setPlaceholderText('')
return super().eventFilter(source, event)
Подробнее здесь: https://stackoverflow.com/questions/603 ... t-designer