我有一个QVBox布局,其中包含一个QVBox布局和一个QHBox布局。我使用另一个QVBox布局来保存动态创建的GUI对象,使用QHBox布局来保存添加/删除这些对象的按钮。如果我将QHBox放在QVBox的顶部,一切都正常工作,但是当我尝试将QHBox放在QVBox的下面时,对象没有正确移除,而是停留在QHBox顶部的“延迟”位置。我将上传图片来演示这个问题。第一张照片是在采取行动之前,第二张是在创建新对象之后,第三张是在删除对象之后
下面是创建和删除新对象的代码
def addClient(self):
if (len(self.clients) < 5):
client = clientComponent(self)
self.clients.append(client)
index = len(self.clients)-1
self.vLayout3.addWidget(self.clients[index])
client.setIndex(index)
self.clients[index].startButton.clicked.connect(partial(self.threadcontrol, '2', client.getIndex()))
self.clients[index].stopButton.clicked.connect(partial(self.clientstop, '0', client.getIndex()))
def deleteClient(self):
if (len(self.clients) > 1):
self.vLayout3.removeWidget(self.clients.pop())
这是我完成布局的地方
def initializeUi(self):
self.mainWidget = QWidget(self)
self.setCentralWidget(self.mainWidget)
self.mainLayout = QVBoxLayout(self.mainWidget)
self.hLayout1 = QHBoxLayout()
self.hLayout2 = QHBoxLayout()
self.vLayout1 = QVBoxLayout()
self.vLayout2 = QVBoxLayout()
self.vLayout3 = QVBoxLayout()
self.addServer()
self.addClient()
self.serverBox = QGroupBox('Server')
self.clientBox = QGroupBox('Client')
self.traffic1 = QLabel('0.0Mb/s', self)
self.traffic1.setAlignment(Qt.AlignRight)
self.traffic2 = QLabel('0.0Mb/s', self)
self.traffic2.setAlignment(Qt.AlignCenter)
self.traffic3 = QLabel('0.0Mb/s', self)
self.traffic3.setAlignment(Qt.AlignLeft)
self.newClientButton = QPushButton('+', self)
self.deleteClientButton = QPushButton('-', self)
self.hLayout1.addWidget(self.traffic1)
self.hLayout1.addWidget(self.traffic2)
self.hLayout1.addWidget(self.traffic3)
self.hLayout2.addWidget(self.newClientButton)
self.hLayout2.addWidget(self.deleteClientButton)
self.vLayout2.addLayout(self.vLayout3)
self.vLayout2.addLayout(self.hLayout2)
self.mainLayout.addWidget(self.plot)
self.mainLayout.addLayout(self.hLayout1)
self.serverBox.setLayout(self.vLayout1)
self.mainLayout.addWidget(self.serverBox)
self.clientBox.setLayout(self.vLayout2)
self.mainLayout.addWidget(self.clientBox)
从布局中删除小部件时,它仍保留在父小部件的 object tree,因此它会显示在任何布局之外。 要从对象树中删除小部件,请调用
widget.setParent(None)
。widget.deleteLater()
也有效。这是我的MCVE(Qt4,Py2.7):
在我的系统上,我还必须在删除后调用
self.adjustSize()
来调整主窗口的大小这是因为在从布局中删除客户端小部件后,主窗口仍然是它们的父窗口。如果将小部件分配给父小部件而不将其添加到任何布局中,您将看到类似的行为
删除父级应该可以解决此问题
您可能还需要调用adjustSize来调整窗口大小以适应其余的小部件
相关问题 更多 >
编程相关推荐