В моей программе отображается QGroupBox
, в котором много QPushButton
. Во время выполнения программы пользователь может нажать кнопку за пределами QGroupBox
, и все кнопки в ней будут удалены или скрыты. Проблема в том, что я не могу найти способ сделать это непосредственно с кнопками или путем очистки QGroupBox
.
Я уже пробовал deleteLater
на кнопках, но это не сработало. Затем я попытался очистить layout
от QGroupBox
, но это тоже не сработало. Вот код, который я только что написал, с той же проблемой:
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import random
class UI_Dialog(object):
def addButtons(self,looping):
# Code to remove the previous QPushButton's goes here.
placement = -100
for i in range(looping):
currentName = 'btn' + str(i)
placement = placement + 110
self.btnB = QtWidgets.QPushButton(self.groupBox)
self.btnB.setGeometry(QtCore.QRect(10+placement, 30+placement, 100, 100))
self.btnB.show()
self.btnB.setObjectName(currentName)
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(1300, 800)
self.btnA = QtWidgets.QPushButton(Dialog)
self.btnA.setGeometry(QtCore.QRect(10, 80, 101, 131))
self.btnA.setObjectName("btn1")
self.btnA.clicked.connect(self.pushed)
self.formLayout = QtWidgets.QFormLayout()
self.groupBox = QtWidgets.QGroupBox("Results")
self.groupBox.setLayout(self.formLayout)
self.resultScrollArea = QtWidgets.QScrollArea(Dialog)
self.resultScrollArea.setWidget(self.groupBox)
self.resultScrollArea.setGeometry(QtCore.QRect(20, 220, 1011, 531))
self.resultScrollArea.setWidgetResizable(True)
self.resultScrollArea.setObjectName("resultScrollArea")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def pushed(self):
unkownLength = random.randint(1,20)
self.addButtons(unkownLength)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Example Program"))
self.btnA.setText(_translate("Dialog", "Push Button"))
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = UI_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
Здесь есть вещи, которые, вероятно, не имеют смысла, такие как размер окна, множественные вызовы функций или это диалоговое окно вместо QMainWindow. Однако в контексте реальной программы они имеют смысл, поэтому просто игнорируйте это, я знаю, что это неэффективно. Также весь смысл переменной unkownLength
состоит в том, чтобы эмулировать, что в реальной программе количество сгенерированных кнопок будет определяться пользовательским вводом. Кнопки также не должны быть там в начале, поэтому они создаются нажатием кнопки. При повторном нажатии кнопки следует удалить или скрыть все созданные ранее кнопки. Есть идеи?