Как сделать исчезающие QToolButton?

У меня есть форма, сделанная в Qt Designer. Я хочу сделать так, чтобы при нажатии на lineEdit или textEdit, появлялись toolButton,
а пока пользователь не нажал на них, то их не было видно.

Как это сделать?


main.py:

from PyQt6 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 480)
        MainWindow.setStyleSheet("QLineEdit{\n"
"    min-width: 100px;\n"
"    min-height: 35px;\n"
"    background-color: white;\n"
"    border: 1px solid gray;\n"
"    border-radius: 10px;\n"
"    \n"
"    font: 14pt \"Segoe UI Variable\";\n"
"}\n"
"\n"
"QTextEdit{\n"
"    max-width: 800px;\n"
"    max-height: 100px;\n"
"    background-color: white;\n"
"    border: 1px solid gray;\n"
"    border-radius: 10px;\n"
"\n"
"    \n"
"    font: 12pt \"Segoe UI Variable\";\n"
"}\n"
"\n"
"QToolButton{\n"
"    background-color: white;\n"
"    border: 1px solid gray;\n"
"    border-radius: 10px;\n"
"}\n"
"\n"
"QGroupBox{\n"
"    background-color: white;\n"
"    border: 1px solid gray;\n"
"    border-radius: 10px;\n"
"}")
        self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.groupBox = QtWidgets.QGroupBox(parent=self.centralwidget)
        self.groupBox.setTitle("")
        self.groupBox.setObjectName("groupBox")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.lineEdit = QtWidgets.QLineEdit(parent=self.groupBox)
        self.lineEdit.setObjectName("lineEdit")
        self.gridLayout_2.addWidget(self.lineEdit, 0, 0, 1, 1)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.toolButton_2 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_2.setMinimumSize(QtCore.QSize(30, 0))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("../../icon/format_bold_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_2.setIcon(icon)
        self.toolButton_2.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_2.setObjectName("toolButton_2")
        self.horizontalLayout.addWidget(self.toolButton_2)
        self.toolButton_4 = QtWidgets.QToolButton(parent=self.groupBox)
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("../../icon/format_italic_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_4.setIcon(icon1)
        self.toolButton_4.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_4.setObjectName("toolButton_4")
        self.horizontalLayout.addWidget(self.toolButton_4)
        self.toolButton_3 = QtWidgets.QToolButton(parent=self.groupBox)
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("../../icon/format_underlined_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_3.setIcon(icon2)
        self.toolButton_3.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_3.setObjectName("toolButton_3")
        self.horizontalLayout.addWidget(self.toolButton_3)
        self.toolButton_5 = QtWidgets.QToolButton(parent=self.groupBox)
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap("../../icon/link_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_5.setIcon(icon3)
        self.toolButton_5.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_5.setObjectName("toolButton_5")
        self.horizontalLayout.addWidget(self.toolButton_5)
        self.toolButton = QtWidgets.QToolButton(parent=self.groupBox)
        icon4 = QtGui.QIcon()
        icon4.addPixmap(QtGui.QPixmap("../../icon/format_clear_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton.setIcon(icon4)
        self.toolButton.setIconSize(QtCore.QSize(30, 30))
        self.toolButton.setObjectName("toolButton")
        self.horizontalLayout.addWidget(self.toolButton)
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        self.gridLayout_2.addLayout(self.horizontalLayout, 1, 0, 1, 1)
        self.textEdit = QtWidgets.QTextEdit(parent=self.groupBox)
        self.textEdit.setObjectName("textEdit")
        self.gridLayout_2.addWidget(self.textEdit, 2, 0, 1, 1)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.toolButton_12 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_12.setIcon(icon)
        self.toolButton_12.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_12.setObjectName("toolButton_12")
        self.horizontalLayout_2.addWidget(self.toolButton_12)
        self.toolButton_11 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_11.setIcon(icon1)
        self.toolButton_11.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_11.setObjectName("toolButton_11")
        self.horizontalLayout_2.addWidget(self.toolButton_11)
        self.toolButton_10 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_10.setIcon(icon2)
        self.toolButton_10.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_10.setObjectName("toolButton_10")
        self.horizontalLayout_2.addWidget(self.toolButton_10)
        self.toolButton_9 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_9.setIcon(icon3)
        self.toolButton_9.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_9.setObjectName("toolButton_9")
        self.horizontalLayout_2.addWidget(self.toolButton_9)
        self.toolButton_8 = QtWidgets.QToolButton(parent=self.groupBox)
        icon5 = QtGui.QIcon()
        icon5.addPixmap(QtGui.QPixmap("../../icon/format_list_numbered_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_8.setIcon(icon5)
        self.toolButton_8.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_8.setObjectName("toolButton_8")
        self.horizontalLayout_2.addWidget(self.toolButton_8)
        self.toolButton_7 = QtWidgets.QToolButton(parent=self.groupBox)
        icon6 = QtGui.QIcon()
        icon6.addPixmap(QtGui.QPixmap("../../icon/format_list_bulleted_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_7.setIcon(icon6)
        self.toolButton_7.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_7.setObjectName("toolButton_7")
        self.horizontalLayout_2.addWidget(self.toolButton_7)
        self.toolButton_6 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_6.setIcon(icon4)
        self.toolButton_6.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_6.setObjectName("toolButton_6")
        self.horizontalLayout_2.addWidget(self.toolButton_6)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem1)
        self.gridLayout_2.addLayout(self.horizontalLayout_2, 3, 0, 1, 1)
        self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 1)
        spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
        self.gridLayout.addItem(spacerItem2, 1, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.lineEdit.setPlaceholderText(_translate("MainWindow", "Новая форма"))
        self.toolButton_2.setText(_translate("MainWindow", "..."))
        self.toolButton_4.setText(_translate("MainWindow", "..."))
        self.toolButton_3.setText(_translate("MainWindow", "..."))
        self.toolButton_5.setText(_translate("MainWindow", "..."))
        self.toolButton.setText(_translate("MainWindow", "..."))
        self.textEdit.setPlaceholderText(_translate("MainWindow", "Описание"))
        self.toolButton_12.setText(_translate("MainWindow", "..."))
        self.toolButton_11.setText(_translate("MainWindow", "..."))
        self.toolButton_10.setText(_translate("MainWindow", "..."))
        self.toolButton_9.setText(_translate("MainWindow", "..."))
        self.toolButton_8.setText(_translate("MainWindow", "..."))
        self.toolButton_7.setText(_translate("MainWindow", "..."))
        self.toolButton_6.setText(_translate("MainWindow", "..."))

Ответы (1 шт):

Автор решения: S. Nick

Вызов setVisible(False) или hide() явно скрывает виджет.

Обратите внимание на то, что я добавил виджеты self.frame_1 и self.frame_2 и добавил в них горизонтальные менеджеры компоновки.

Я увидел вашу задачу так:

#from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 480)
        MainWindow.setStyleSheet("QLineEdit{\n"
"    min-width: 100px;\n"
"    min-height: 35px;\n"
"    background-color: white;\n"
"    border: 1px solid gray;\n"
"    border-radius: 10px;\n"
"    \n"
"    font: 14pt \"Segoe UI Variable\";\n"
"}\n"
"\n"
"QTextEdit{\n"
"    max-width: 800px;\n"
"    max-height: 100px;\n"
"    background-color: white;\n"
"    border: 1px solid gray;\n"
"    border-radius: 10px;\n"
"\n"
"    \n"
"    font: 12pt \"Segoe UI Variable\";\n"
"}\n"
"\n"
"QToolButton{\n"
"    background-color: white;\n"
"    border: 1px solid gray;\n"
"    border-radius: 10px;\n"
"}\n"
"\n"
"QGroupBox{\n"
"    background-color: white;\n"
"    border: 2px solid #f00;\n"
"    border-radius: 10px;\n"

"/* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv <---------------- +++*/" 
"    margin-top: 12px;"
"    font-size: 20px;\n"
"}"

"QGroupBox::title {\n"
"    subcontrol-origin: margin;\n"
"    subcontrol-position: top center;\n"
"    color: #f00;\n"
"}"
"/* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ <---------------- +++ */" 
)

        self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        
        self.groupBox = QtWidgets.QGroupBox(parent=self.centralwidget)
        self.groupBox.setTitle("GroupBox")
        self.groupBox.setObjectName("groupBox")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.lineEdit = QtWidgets.QLineEdit(parent=self.groupBox)
        self.lineEdit.setObjectName("lineEdit")
        self.gridLayout_2.addWidget(self.lineEdit, 0, 0, 1, 1)

# +++   vvvvvvvvvvvv             vvvvvvvv
        self.frame_1 = QtWidgets.QFrame()                          # +++
                                                    # vvvvvvvvvvvv # +++
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame_1) 
        self.horizontalLayout.setObjectName("horizontalLayout")
        
#-      self.toolButton_2 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_2 = QtWidgets.QToolButton()                # +++
        
        self.toolButton_2.setMinimumSize(QtCore.QSize(30, 0))
        icon = QtGui.QIcon()
        
#        icon.addPixmap(QtGui.QPixmap("../../icon/format_bold_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        icon.addPixmap(QtGui.QPixmap("OK.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)

        self.toolButton_2.setIcon(icon)
        self.toolButton_2.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_2.setObjectName("toolButton_2")
        self.horizontalLayout.addWidget(self.toolButton_2)

#       self.toolButton_4 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_4 = QtWidgets.QToolButton()

        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("OK.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_4.setIcon(icon1)
        self.toolButton_4.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_4.setObjectName("toolButton_4")
        self.horizontalLayout.addWidget(self.toolButton_4)
        self.toolButton_3 = QtWidgets.QToolButton()
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("OK.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_3.setIcon(icon2)
        self.toolButton_3.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_3.setObjectName("toolButton_3")
        self.horizontalLayout.addWidget(self.toolButton_3)
        self.toolButton_5 = QtWidgets.QToolButton()
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap("OK.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_5.setIcon(icon3)
        self.toolButton_5.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_5.setObjectName("toolButton_5")
        self.horizontalLayout.addWidget(self.toolButton_5)

        self.toolButton = QtWidgets.QToolButton()
        icon4 = QtGui.QIcon()
        icon4.addPixmap(QtGui.QPixmap("OK.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton.setIcon(icon4)
        self.toolButton.setIconSize(QtCore.QSize(30, 30))
        self.toolButton.setObjectName("toolButton")
        self.horizontalLayout.addWidget(self.toolButton)
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        
#-      self.gridLayout_2.addLayout(self.horizontalLayout, 1, 0, 1, 1)
        self.gridLayout_2.addWidget(self.frame_1, 1, 0, 1, 1)         # +++
        
        self.textEdit = QtWidgets.QTextEdit(parent=self.groupBox)
        self.textEdit.setObjectName("textEdit")
        self.gridLayout_2.addWidget(self.textEdit, 2, 0, 1, 1)
        
# +++
        self.frame_2 = QtWidgets.QFrame()                            # +++
                                                      # vvvvvvvvvvvv # +++
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.frame_2)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.toolButton_12 = QtWidgets.QToolButton()
        self.toolButton_12.setIcon(icon)
        self.toolButton_12.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_12.setObjectName("toolButton_12")
        self.horizontalLayout_2.addWidget(self.toolButton_12)
        self.toolButton_11 = QtWidgets.QToolButton()
        self.toolButton_11.setIcon(icon1)
        self.toolButton_11.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_11.setObjectName("toolButton_11")
        self.horizontalLayout_2.addWidget(self.toolButton_11)
        self.toolButton_10 = QtWidgets.QToolButton()
        self.toolButton_10.setIcon(icon2)
        self.toolButton_10.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_10.setObjectName("toolButton_10")
        self.horizontalLayout_2.addWidget(self.toolButton_10)
        self.toolButton_9 = QtWidgets.QToolButton()
        self.toolButton_9.setIcon(icon3)
        self.toolButton_9.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_9.setObjectName("toolButton_9")
        self.horizontalLayout_2.addWidget(self.toolButton_9)
        self.toolButton_8 = QtWidgets.QToolButton()
        icon5 = QtGui.QIcon()
        icon5.addPixmap(QtGui.QPixmap("OK.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_8.setIcon(icon5)
        self.toolButton_8.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_8.setObjectName("toolButton_8")
        self.horizontalLayout_2.addWidget(self.toolButton_8)
        self.toolButton_7 = QtWidgets.QToolButton()
        icon6 = QtGui.QIcon()
        icon6.addPixmap(QtGui.QPixmap("OK.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_7.setIcon(icon6)
        self.toolButton_7.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_7.setObjectName("toolButton_7")
        self.horizontalLayout_2.addWidget(self.toolButton_7)
        self.toolButton_6 = QtWidgets.QToolButton()
        self.toolButton_6.setIcon(icon4)
        self.toolButton_6.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_6.setObjectName("toolButton_6")
        self.horizontalLayout_2.addWidget(self.toolButton_6)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem1)
        
#        self.gridLayout_2.addLayout(self.horizontalLayout_2, 3, 0, 1, 1)
        self.gridLayout_2.addWidget(self.frame_2, 3, 0, 1, 1)           # +++

        self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 1)
        spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
        self.gridLayout.addItem(spacerItem2, 1, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.lineEdit.setPlaceholderText(_translate("MainWindow", "Новая форма"))
        self.toolButton_2.setText(_translate("MainWindow", "..."))
        self.toolButton_4.setText(_translate("MainWindow", "..."))
        self.toolButton_3.setText(_translate("MainWindow", "..."))
        self.toolButton_5.setText(_translate("MainWindow", "..."))
        self.toolButton.setText(_translate("MainWindow", "..."))
        self.textEdit.setPlaceholderText(_translate("MainWindow", "Описание"))
        self.toolButton_12.setText(_translate("MainWindow", "..."))
        self.toolButton_11.setText(_translate("MainWindow", "..."))
        self.toolButton_10.setText(_translate("MainWindow", "..."))
        self.toolButton_9.setText(_translate("MainWindow", "..."))
        self.toolButton_8.setText(_translate("MainWindow", "..."))
        self.toolButton_7.setText(_translate("MainWindow", "..."))
        self.toolButton_6.setText(_translate("MainWindow", "..."))
        
        
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__() 
        
        self.setupUi(self)
        
        self.lineEdit.returnPressed.connect(
            lambda: self.frame_1.setVisible(bool(self.lineEdit.text())))


        self.textEdit.textChanged.connect(
            lambda: self.frame_2.setVisible(bool(self.textEdit.toPlainText())))
        
        self.frame_1.setVisible(False)
        self.frame_2.setVisible(False)        

        

if __name__ == '__main__':
    import sys
    
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения

введите сюда описание изображения


OK.png

введите сюда описание изображения

→ Ссылка