From ff2d1b99de302ce51512a8a3a3f5a8154bc48ee1 Mon Sep 17 00:00:00 2001 From: Jan Rach <rachj@students.zcu.cz> Date: Wed, 2 Jun 2021 14:46:54 +0200 Subject: [PATCH] Re: #9016 - Topic close plot reaction implemented --- aswi2021vochomurka/view/main_view.py | 45 +++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/aswi2021vochomurka/view/main_view.py b/aswi2021vochomurka/view/main_view.py index 8e34463..76e9388 100644 --- a/aswi2021vochomurka/view/main_view.py +++ b/aswi2021vochomurka/view/main_view.py @@ -23,6 +23,7 @@ class Worker(QObject, SubscriberCallback): disconnected = pyqtSignal() error = pyqtSignal(Exception) newMessage = pyqtSignal(Message) + closeTopic = pyqtSignal(str) subscriber: Subscriber = None params: SubscriberParams @@ -48,10 +49,11 @@ class Worker(QObject, SubscriberCallback): def onMessage(self, message: Message): self.newMessage.emit(message) - # self.window.plot(message) def onCloseTopic(self, topic: str): - pass + print("Close topic") + self.closeTopic.emit(topic) + #pass class MainView(QMainWindow): @@ -66,9 +68,11 @@ class MainView(QMainWindow): self.dataIndex = 0 self.dataDict = {} - self.canvasDict = {} self.figureDict = {} + self.widgetDict = {} + + self.widgetList = [] # self.toolbar = NavigationToolbar(self.canvas, self) @@ -126,7 +130,7 @@ class MainView(QMainWindow): figure = plt.figure(figsize=[500, 500]) canvas = FigureCanvas(figure) - layout = QHBoxLayout() + self.layout = QHBoxLayout() plt.plot(self.dataDict[message.topic]) @@ -134,18 +138,40 @@ class MainView(QMainWindow): self.figureDict[message.topic] = figure widget = QWidget() - widget.setLayout(layout) + self.widgetDict[message.topic] = widget + self.widgetList.append(widget) + widget.setLayout(self.layout) button = QPushButton(':') button.setFixedSize(QSize(40, 40)) - layout.addWidget(canvas) - layout.addWidget(button) - layout.setAlignment(button, QtCore.Qt.AlignTop) + self.layout.addWidget(canvas) + self.layout.addWidget(button) + self.layout.setAlignment(button, QtCore.Qt.AlignTop) widget.setMinimumSize(QSize(500, 500)) self.grid.addWidget(widget, int(self.chartsNum / 2), self.chartsNum % 2) self.chartsNum += 1 + def deletePlot(self, topic: str): + widget = self.widgetDict[topic] + self.widgetList.remove(widget) + widget.setParent(None) + + del self.widgetDict[topic] + del self.canvasDict[topic] + del self.figureDict[topic] + del self.dataDict[topic] + + self.reorganizePlots() + + def reorganizePlots(self): + count = 0 + for widget in self.widgetList: + self.grid.addWidget(widget, int(count / 2), count % 2) + count += 1 + + self.chartsNum -= 1 + def closeEvent(self, a0: QtGui.QCloseEvent) -> None: self.worker.stop() @@ -172,6 +198,9 @@ class MainView(QMainWindow): self.worker.newMessage.connect( lambda message: self.plot(message) ) + self.worker.closeTopic.connect( + lambda topic: self.deletePlot(topic) + ) self.worker.window = self self.workerThread.start() -- GitLab