2017-09-12 5 views
0

레이아웃에서 ChartViewer를 지울 때 필요하지만, 할 때 마지막 위젯을 삭제할 수 없습니다. 내 레이아웃의 길이를 테스트 할 때 , 나는 0 갔지만 위젯은 그림과 같이, 레이아웃의 업데이트 후 아직 여기있다 :왜 레이아웃입니까, 업데이트하지 않습니까?

여기

enter image description here

내 코드 나 삭제, 위젯과

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]) 

어떤 제안을 : 그래프 여기

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) 

와 내가 그래프를 생성하고 레이아웃에 추가하는 코드입니다?

+0

문제는 나를 위해 분명하지 않다입니다. –

+0

Azul 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)