Как обратиться к дочерней кнопке (QPushButton)
У меня вопрос продолжение к ответу на вопрос: Как добавить кнопку закрытия в PushButton.
Как возможно после создания виджета на форме можно обраться к кнопке закрытия?
К примеру, я хотел бы скрывать её или делать её доступной для нажатия тогда когда это нужно.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Сделайте двойной клик средней кнопкой мыши, а затем сделайте двойной клик правой кнопкой мыши.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
class ToolButton(QtWidgets.QToolButton): # +++
def __init__(self, parent=None):
super(ToolButton, self).__init__(parent)
self.parent = parent
def mouseDoubleClickEvent(self, event): # +++
if event.button() == Qt.LeftButton:
print(f'mouseDoubleClickEvent LeftButton') #
elif event.button() == Qt.MidButton: # +++ MidButton
self.parent.button.hide() # +++ скрывать её
print(f'mouseDoubleClickEvent MidButton') #
elif event.button() == Qt.RightButton: # +++ RightButton
self.parent.button.show() # +++ делать её доступной
print(f'mouseDoubleClickEvent RightButton') #
class ToolButtonWidget(QtWidgets.QWidget):
def __init__(self, text, path_icon, parent=None):
super(ToolButtonWidget, self).__init__(parent)
self.toolButton = ToolButton(parent) # +++ parent
self.toolButton.setIcon(QtGui.QIcon(path_icon))
self.toolButton.setIconSize(QtCore.QSize(227, 238))
label = QtWidgets.QLabel(text)
lay = QtWidgets.QVBoxLayout(self)
lay.addWidget(self.toolButton, 0, QtCore.Qt.AlignCenter)
lay.addWidget(label, 0, QtCore.Qt.AlignCenter)
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.btn = ToolButtonWidget("btnClose", "_btnClose.png", self) # +++ self
self.btn.toolButton.clicked.connect(lambda: print('Hello "btnClose"'))
vlay = QtWidgets.QVBoxLayout(self)
vlay.addWidget(self.btn)
vlay.addStretch()
self.button = QPushButton('r', self.btn.toolButton, font=QFont('Webdings'))
self.button.setMinimumSize(38, 38)
self.button.setMaximumSize(38, 38)
self.button.setObjectName('buttonClose')
self.button.move(173, 30)
self.button.clicked.connect(lambda: print('Hello "buttonClose"'))
Style = """
#buttonClose {
border-radius: 19px;
}
#buttonClose:hover {
color: white;
background: rgb(232, 17, 35);
}
#buttonClose:pressed {
color: white;
background: rgb(165, 69, 106);
}
"""
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(Style)
w = Widget()
w.resize(640, 480)
w.show()
sys.exit(app.exec_())
_btnClose.png




