1 |
1 |
import logging
|
2 |
2 |
import math
|
3 |
|
import random
|
4 |
3 |
|
|
4 |
import matplotlib.pyplot as plt
|
5 |
5 |
from PyQt5.QtCore import QSize, QThread, QObject, pyqtSignal
|
6 |
|
from PyQt5.QtWidgets import QMainWindow, QPlainTextEdit, QDialog, QHBoxLayout
|
7 |
|
from numpy import pi, sin, cos, tan, exp
|
8 |
|
from matplotlib.pyplot import subplot
|
|
6 |
from PyQt5.QtWidgets import QMainWindow, QWidget, QMenuBar, QAction
|
|
7 |
from PyQt5.QtWidgets import QVBoxLayout
|
|
8 |
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
|
9 |
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
|
9 |
10 |
|
10 |
11 |
from aswi2021vochomurka.model.Message import Message
|
11 |
12 |
from aswi2021vochomurka.service.mqtt.mqtt_subscriber import MQTTSubscriber
|
12 |
13 |
from aswi2021vochomurka.service.subscriber import Subscriber
|
13 |
14 |
from aswi2021vochomurka.service.subscriber_callback import SubscriberCallback
|
14 |
15 |
from aswi2021vochomurka.service.subscriber_params import SubscriberParams, ConnectionParams
|
15 |
|
|
16 |
|
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
17 |
|
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
|
18 |
|
import matplotlib.pyplot as plt
|
19 |
|
|
20 |
|
import sys
|
21 |
|
from PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout
|
22 |
|
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
|
23 |
|
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
|
24 |
|
import matplotlib.pyplot as plt
|
25 |
|
import random
|
26 |
|
|
|
16 |
from aswi2021vochomurka.view.about import AboutDialog
|
|
17 |
from aswi2021vochomurka.view.help import HelpDialog
|
27 |
18 |
from aswi2021vochomurka.view.logger_view import LoggerView
|
|
19 |
from aswi2021vochomurka.view.settings import SettingsDialog
|
28 |
20 |
|
29 |
21 |
|
30 |
22 |
class Worker(QObject, SubscriberCallback):
|
... | ... | |
62 |
54 |
pass
|
63 |
55 |
|
64 |
56 |
|
65 |
|
class MainView(QDialog):
|
|
57 |
class MainView(QMainWindow):
|
66 |
58 |
worker: Worker = None
|
67 |
59 |
workerThread: QThread = None
|
68 |
60 |
|
... | ... | |
81 |
73 |
self.toolbar = NavigationToolbar(self.canvas, self)
|
82 |
74 |
|
83 |
75 |
self.setMinimumSize(QSize(440, 240))
|
84 |
|
self.setWindowTitle("MQTT demo")
|
85 |
|
|
86 |
|
# Add logger text field
|
87 |
|
logger = LoggerView(self)
|
88 |
|
formatter = logging.Formatter('%(asctime)s %(message)s', '%H:%M')
|
89 |
|
logger.setFormatter(formatter)
|
90 |
|
logger.setLevel(logging.INFO)
|
91 |
|
logging.getLogger('').addHandler(logger)
|
|
76 |
self.setWindowTitle("MQTT client")
|
92 |
77 |
|
|
78 |
logger = self._createLoggerView()
|
93 |
79 |
layout = QVBoxLayout()
|
94 |
80 |
layout.addWidget(logger.widget)
|
95 |
81 |
layout.addWidget(self.toolbar)
|
96 |
82 |
layout.addWidget(self.canvas)
|
97 |
83 |
|
98 |
|
self.setLayout(layout)
|
|
84 |
widget = QWidget()
|
|
85 |
widget.setLayout(layout)
|
|
86 |
self.setCentralWidget(widget)
|
|
87 |
self._createMenuBar()
|
99 |
88 |
|
100 |
89 |
self.initSubscriber()
|
101 |
90 |
|
|
91 |
def _createLoggerView(self):
|
|
92 |
logger = LoggerView(self)
|
|
93 |
formatter = logging.Formatter('%(asctime)s %(message)s', '%H:%M')
|
|
94 |
logger.setFormatter(formatter)
|
|
95 |
logger.setLevel(logging.INFO)
|
|
96 |
logging.getLogger('').addHandler(logger)
|
|
97 |
return logger
|
|
98 |
|
|
99 |
def _createMenuBar(self):
|
|
100 |
menuBar = QMenuBar(self)
|
|
101 |
settingsAction = QAction("&Settings", self)
|
|
102 |
settingsAction.triggered.connect(self.settings)
|
|
103 |
helpAction = QAction("&Help", self)
|
|
104 |
helpAction.triggered.connect(self.help)
|
|
105 |
aboutAction = QAction("&About", self)
|
|
106 |
aboutAction.triggered.connect(self.about)
|
|
107 |
menuBar.addAction(settingsAction)
|
|
108 |
menuBar.addAction(helpAction)
|
|
109 |
menuBar.addAction(aboutAction)
|
|
110 |
self.setMenuBar(menuBar)
|
|
111 |
|
102 |
112 |
def plot(self, message: Message):
|
103 |
113 |
self.figure.clear()
|
104 |
114 |
|
... | ... | |
118 |
128 |
|
119 |
129 |
self.canvas.draw()
|
120 |
130 |
|
|
131 |
def settings(self):
|
|
132 |
dialog = SettingsDialog()
|
|
133 |
dialog.exec_()
|
|
134 |
|
|
135 |
def help(self):
|
|
136 |
dialog = HelpDialog()
|
|
137 |
dialog.exec_()
|
|
138 |
pass
|
|
139 |
|
|
140 |
def about(self):
|
|
141 |
dialog = AboutDialog()
|
|
142 |
dialog.exec_()
|
|
143 |
|
121 |
144 |
def initSubscriber(self):
|
122 |
145 |
self.workerThread = QThread()
|
123 |
146 |
self.worker = Worker()
|
Re: #8921 - menubar with empty dialogs