Как сделать исчезающие 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