Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 43dda840

Přidáno uživatelem Pavel Průcha před téměř 4 roky(ů)

  • ID 43dda840f5ab80b8b3d9f2400ae0fecbeaa3c8f6
  • Rodič 82d14084

frontend
- layout
- adding new random graph for every new message

Zobrazit rozdíly:

aswi2021vochomurka/view/main_view.py
1
import math
2
import random
3

  
1 4
from PyQt5.QtCore import QSize, QThread, QObject, pyqtSignal
2
from PyQt5.QtWidgets import QMainWindow, QPlainTextEdit
5
from PyQt5.QtWidgets import QMainWindow, QPlainTextEdit, QDialog, QHBoxLayout
6
from numpy import pi, sin, cos, tan, exp
7
from matplotlib.pyplot import subplot
3 8

  
4 9
from aswi2021vochomurka.model.Message import Message
5 10
from aswi2021vochomurka.service.mqtt.mqtt_subscriber import MQTTSubscriber
6 11
from aswi2021vochomurka.service.subscriber import Subscriber
7 12
from aswi2021vochomurka.service.subscriber_callback import SubscriberCallback
8 13

  
14
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
15
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
16
import matplotlib.pyplot as plt
17

  
18
import sys
19
from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout
20
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
21
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
22
import matplotlib.pyplot as plt
23
import random
24

  
9 25

  
10 26
class Worker(QObject, SubscriberCallback):
11 27
    connected = pyqtSignal()
......
29 45

  
30 46
    def onMessage(self, message: Message):
31 47
        self.newMessage.emit(message.topic)
48
        self.window.plot()
32 49

  
33 50

  
34
class MainView(QMainWindow):
51
#class MainView(QMainWindow):
52
class MainView(QDialog):
35 53
    worker: Worker = None
36 54
    workerThread: QThread = None
37 55

  
38 56
    def __init__(self):
39
        QMainWindow.__init__(self)
57
        #QMainWindow.__init__(self)
58
        super(MainView, self).__init__()
59

  
60
        self.chartsNum = 0
61
        self.arrayData = []
62

  
63
        self.figure = plt.figure(figsize=([500,500]))
64

  
65
        self.canvas = FigureCanvas(self.figure)
66
        self.toolbar = NavigationToolbar(self.canvas, self)
40 67

  
41 68
        self.setMinimumSize(QSize(440, 240))
42 69
        self.setWindowTitle("MQTT demo")
......
44 71
        # Add text field
45 72
        self.b = QPlainTextEdit(self)
46 73
        self.b.insertPlainText("App started...\n")
47
        self.b.move(10, 10)
48
        self.b.resize(400, 200)
74
        # self.b.move(10, 50)
75
        # self.b.resize(200, 100)
76

  
77
        layout = QVBoxLayout()
78
        layout.addWidget(self.b)
79
        layout.addWidget(self.toolbar)
80
        layout.addWidget(self.canvas)
81

  
82
        self.setLayout(layout)
83

  
84
        # self.plot()
49 85

  
50 86
        self.initSubscriber()
51 87

  
88
    # action called by thte push button
89
    def plot(self):
90

  
91
        self.chartsNum += 1
92
        rows = math.ceil(self.chartsNum / 2)
93

  
94
        self.figure.clear()
95

  
96
        data = [random.random() for i in range(10)]
97
        self.arrayData.append(data)
98

  
99
        for x in range(self.chartsNum):
100
            self.figure.add_subplot(rows,2,x+1)
101
            plt.plot(self.arrayData[x])
102

  
103
        self.canvas.draw()
104

  
52 105
    def initSubscriber(self):
53 106
        self.workerThread = QThread()
54 107
        self.worker = Worker()
......
57 110
        self.worker.newMessage.connect(
58 111
            lambda message: self.b.insertPlainText(message + "\n")
59 112
        )
113
        self.worker.window = self
60 114
        self.workerThread.start()

Také k dispozici: Unified diff