2017-09-12 64 views
0

我需要的,从布局清楚我chartViewers,但是当我做,我不能删除最后一个小部件。 当我测试我的布局的长度,我得到0,但是小工具仍是这里的布局更新后,如图片:为什么布局,不更新?

enter image description here

我在这里的代码时,我删除了部件和图

print("proceding to delete chart ", chartName, " at : ", indexGraph) 
currentGraph = self.charts[indexGraph] 
currentWidget = self.chartVs[indexGraph] 

self.chartLayout.removeWidget(currentWidget) 
self.chartVs.remove(currentWidget) 

currentGraph.clearData() 
self.charts.remove(currentGraph) 
self.chartLayout.update() 

#currentWidget.resetCachedContent() 
listGraphs.remove(chartName) 
self.refreshListWithOpt(self.chartTree, listGraphs, 1, optGraphs) 

这里是我创建的图表,并将其添加到布局的代码:

self.charts.append(chartClass(patientStr, exp)) 

print("\nNew Plot chart ", self.charts[lastIndex].name, " length : ", lastIndex) 

listGraphs.append(self.charts[lastIndex].name) 
print("list Graphs : ", listGraphs) 
self.charts[lastIndex].plotJSON(myData.plot(patientStr, exp)) 

self.chartVs.append(QChartView(self.charts[lastIndex])) 
self.chartVs[lastIndex].setRenderHint(QPainter.Antialiasing) 
self.chartLayout.insertWidget(0, self.chartVs[lastIndex]) 

什么建议吗?

+0

这个问题并不清楚。 –

+0

阿祖尔AGMA Ghilas,我的问题是与最后一个控件,当我删除它,它仍然存在于我的布局,甚至是所有我做了什么,直到如今。 –

+1

尝试:'currentWidget.deleteLater()' – eyllanesc

回答

1

当小部件添加到主插件的默认位置为0,0,当我们把它添加到这个位置由它处理的布局,因此,如果我们从布局中删除它,它会返回到初始位置,可视化地产生不被删除的效果,然后解决它我们必须删除它的部件我们使用的方法deleteLater()

0

有解决方案,我的小部件仍然附加到布局,即使在removeItem之后。所以解决方案是widgetToDelete.deleteLater()widgetToDelete.setParent(None)

print("proceding to delete chart ", chartName, " at : ", indexGraph) 
currentGraph = self.charts[indexGraph] 
currentWidget = self.chartVs[indexGraph] 

self.chartLayout.removeItem(currentWidgetItem) 
currentWidgetItem.widget().deleteLater() 
#currentWidgetItem.widget().setParent(None) 

self.chartLayout.removeItem(currentWidgetItem) 
self.chartVs.remove(currentWidget) 
self.chartLayout.update() 

#currentWidget.resetCachedContent() 
listGraphs.remove(chartName) 
self.refreshListWithOpt(self.chartTree, listGraphs, 1, optGraphs)