Abend 10.Aug

This commit is contained in:
Jacob Holder 2021-08-10 23:51:50 +02:00
parent 0d608f8dda
commit 519b248261
Signed by: jacob
GPG Key ID: 2194FC747048A7FD
9 changed files with 717 additions and 52 deletions

View File

@ -2,7 +2,7 @@ import os
class Measurement: class Measurement:
def __init__(self, name, sensors, path=None, comment=None): def __init__(self, name, path=None, comment=None):
self.name = name self.name = name
self.path = os.path.join(path or "./meas_values", self.name) self.path = os.path.join(path or "./meas_values", self.name)
os.makedirs(self.path) os.makedirs(self.path)
@ -18,8 +18,8 @@ class Measurement:
data: list of tuples: (timestamp, value) data: list of tuples: (timestamp, value)
""" """
if sensor_name not in self.data_files: if sensor_name not in self.data_files:
self.data_files[sensor_name] = open(os.path.join(self.path, f"{sensor_name}_data.csv")) self.data_files[sensor_name] = open(os.path.join(self.path, f"{sensor_name}_data.csv"), "w")
for timestamp, value in data: for timestamp, value in zip(data[0], data[1]):
self.data_files[sensor_name].write(f"{timestamp.isoformat()}, {timestamp.timestamp()}, {value}\n") self.data_files[sensor_name].write(f"{timestamp.isoformat()}, {timestamp.timestamp()}, {value}\n")
def save_version_text(self, comment): def save_version_text(self, comment):

View File

@ -5,34 +5,58 @@ Data:
- dict with sensor data (temp, pressure, current) - dict with sensor data (temp, pressure, current)
- dict with drivers (magnetic field control) - dict with drivers (magnetic field control)
""" """
from datetime import datetime
from threading import Event, Thread
from time import sleep
from sensor import Sensor from sensor import Sensor
from measurement import Measurement
from plot_data import PlotData
class DataGrabber(Thread):
def __init__(self, sensors, drivers, plot_data):
super().__init__()
self.measurement = None
self.sensors = sensors
self.drivers = drivers
self.plot_data = plot_data
self.exit_request = Event()
def run(self):
while not self.exit_request.is_set():
for name, sens in self.sensors.items():
dat = sens.get_data
self.plot_data.append_data(name,dat)
if self.measurement is not None:
self.measurement.append_data(name, dat)
sleep(1)
class Model: class Model:
def __init__(self): def __init__(self):
self.plot_data = PlotData()
self.sensors = {"temp": Sensor(), "keks": Sensor()} self.sensors = {"temp": Sensor(), "keks": Sensor()}
self.drivers = [] self.drivers = []
self.measurement = None self.measurement = None
self.plot_data = None self.data_grabber = DataGrabber(self.sensors, self.drivers, self.plot_data)
pass self.data_grabber.start()
def start_measuring(self): def start_measuring(self, meas_name=""):
for sens in self.sensors.values(): name = meas_name or f"meas_{datetime.utcnow().isoformat().replace(':', '-')}"
sens.start_measuring() self.measurement = Measurement(name)
self.data_grabber.measurement = self.measurement
def save_measuring(self, path="temp_temp.csv"): def save_measuring(self, path="temp_temp.csv"):
for sens in self.sensors.values(): print("Has no use delete me maybe")
sens.save_measuring()
def stop_measuring(self): def stop_measuring(self):
for sens in self.sensors.values(): self.measurement = None
sens.stop_measuring() self.data_grabber.measurement = None
def clear(self): def clear(self):
for sens in self.sensors.values(): self.plot_data.clear()
sens.clear()
def exit(self): def exit(self):
self.data_grabber.exit_request.set()
for sens in self.sensors.values(): for sens in self.sensors.values():
sens.exit() sens.exit()

View File

@ -1,5 +1,6 @@
import numpy as np import numpy as np
from datetime import datetime from datetime import datetime, timedelta
class PlotData(): class PlotData():
def __init__(self): def __init__(self):
@ -9,7 +10,12 @@ class PlotData():
self.start_time = datetime.utcnow() self.start_time = datetime.utcnow()
self.queues = {} self.queues = {}
def clear(self):
for key in self.data:
self.data[key] = np.array([])
def get(self, key):
return self.data.get(key, np.full_like(self.data["time"], np.nan, dtype=np.double))
def append_data(self, sensor_name, data): def append_data(self, sensor_name, data):
""" """
@ -17,25 +23,37 @@ class PlotData():
""" """
if sensor_name not in self.data: if sensor_name not in self.data:
self.queues[sensor_name] = [] self.queues[sensor_name] = []
self.data[sensor_name] = np.full_like(self.data["time"], np.nan) self.data[sensor_name] = np.full_like(self.data["time"], np.nan, dtype=np.double)
for time, dat in zip(data[0], data[1]):
for data_tuple in data.values(): self.queues[sensor_name].append((time, dat))
self.queues[sensor_name].append(data_tuple)
running = True running = True
while running: while running:
#TODO timeout clean # TODO timeout clean and time clean
for sensor, que in self.queues.items():
index = -1
for time, _ in que:
if time < self.start_time \
+ timedelta(milliseconds=int(self.data["time"][-1]) + self.refresh_rate):
index += 1
if index >= 0:
self.queues[sensor] = que[index:]
#TODO timeout not working as intended
#if timeout is reached add empty values on sensors
#if self.start_time + timedelta(milliseconds=int(self.data["time"][-1])+self.timeout) < datetime.utcnow():
# for sensor, que in self.queues.items():
# if len(que) == 0:
# que.append((self.start_time,np.nan))
for que in self.queues.values(): for que in self.queues.values():
if len(que) == 0: if len(que) == 0:
running = False running = False
break return
for sensor, que in self.queues.items(): for sensor, que in self.queues.items():
self.data[sensor] = np.append(self.data[sensor], que[0]) self.data[sensor] = np.append(self.data[sensor], que[0][1])
que = que[1:] self.queues[sensor] = que[1:]
self.data["time"] = np.append(self.data["time"],self.data["time"][-1]+self.refresh_rate)
""" """
TODO TODO
@ -46,4 +64,3 @@ class PlotData():
return return
update np array update np array
""" """

View File

@ -14,18 +14,16 @@ class SensorWorker(Thread):
self.message_queue = message_queue self.message_queue = message_queue
self.produceData = Event() self.produceData = Event()
self.exit_request = Event() self.exit_request = Event()
self.file = open("temp.csv", "w")
def run(self): def run(self):
""" Worker method of a python Thread. Called when the Thread is started. """ """ Worker method of a python Thread. Called when the Thread is started. """
while not self.exit_request.is_set(): while not self.exit_request.is_set():
if self.produceData.is_set(): if self.produceData.is_set():
temp = random() temp = random()
ts = datetime.now() ts = datetime.utcnow()
self.message_queue.put((ts, temp)) self.message_queue.put((ts, temp))
self.file.write(f"{ts} - {temp}\n")
else: else:
self.file.flush() pass
sleep(1) sleep(1)
@ -34,38 +32,44 @@ class Sensor(object):
def __init__(self): def __init__(self):
super(Sensor, self).__init__() super(Sensor, self).__init__()
self.data = []
self.t = []
self.measureQueue = Queue() self.measureQueue = Queue()
self.measureThread = SensorWorker(self.measureQueue) self.measureThread = SensorWorker(self.measureQueue)
self.measureThread.start() self.measureThread.start()
self.measureThread.produceData.set()
def start_measuring(self): def start_measuring(self):
self.measureThread.produceData.set() self.measureThread.produceData.set()
print("I started meas") print("I started meas")
def save_measuring(self, path="temp_temp.csv"):
print("I saved meas")
np.savetxt(path, np.array(self.data))
def stop_measuring(self): def stop_measuring(self):
self.measureThread.produceData.clear() self.measureThread.produceData.clear()
print("I stopped meas") print("I stopped meas")
def clear(self):
self.data = []
self.t = []
print("I cleared meas")
def exit(self): def exit(self):
self.stop_measuring() self.stop_measuring()
self.measureThread.exit_request.set() self.measureThread.exit_request.set()
@property @property
def get_data(self): def get_data(self):
time = []
val = []
while not self.measureQueue.empty(): while not self.measureQueue.empty():
t, data = self.measureQueue.get() t, data = self.measureQueue.get()
self.data.append(data) time.append(t)
self.t.append(t) val.append(data)
print(self.data) return time, val
return self.t, self.data
# def clear(self):
# self.data = []
# self.t = []
# print("I cleared meas")
#
# def save_measuring(self, path="temp_temp.csv"):
# print("I saved meas")
# np.savetxt(path, np.array(self.data))

190
trial2/wxglade.wxg Normal file
View File

@ -0,0 +1,190 @@
<?xml version="1.0"?>
<!-- generated by wxGlade 1.0.2 on Sun Jul 4 21:22:59 2021 -->
<application class="MyApp" encoding="UTF-8" for_version="3.0" header_extension=".h" indent_amount="4" indent_symbol="space" is_template="0" language="python" mark_blocks="1" name="app" option="0" overwrite="1" path="./wxglade_out.py" source_extension=".cpp" top_window="frame" use_gettext="0" use_new_namespace="1">
<object class="MyFrame" name="frame" base="EditFrame">
<size>1920, 1080</size>
<title>frame</title>
<style>wxDEFAULT_FRAME_STYLE</style>
<menubar>1</menubar>
<toolbar>1</toolbar>
<statusbar>1</statusbar>
<object class="wxMenuBar" name="frame_menubar" base="EditMenuBar">
<menus>
<menu label="File" name="">
<item>
<label>Quit</label>
</item>
</menu>
</menus>
</object>
<object class="wxStatusBar" name="frame_statusbar" base="EditStatusBar">
<fields>
<field width="-1">frame_statusbar</field>
</fields>
</object>
<object class="wxToolBar" name="frame_toolbar" base="EditToolBar">
<tools>
</tools>
</object>
<object class="wxPanel" name="panel_1" base="EditPanel">
<object class="wxGridBagSizer" name="grid_sizer_1" base="EditGridBagSizer">
<rows>2</rows>
<cols>3</cols>
<vgap>0</vgap>
<hgap>0</hgap>
<object class="sizeritem">
<span>2, 1</span>
<border>0</border>
<flag>wxEXPAND</flag>
<object class="wxBoxSizer" name="sizer_1" base="EditBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<option>0</option>
<border>0</border>
<object class="wxStaticText" name="label_1" base="EditStaticText">
<label>Text1</label>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<border>0</border>
<object class="wxStaticText" name="label_2" base="EditStaticText">
<label>Für</label>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<border>0</border>
<object class="wxStaticText" name="label_3" base="EditStaticText">
<label>Statis</label>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<flag>wxEXPAND</flag>
<object class="wxNotebook" name="notebook_1" base="EditNotebook">
<style>wxNB_TOP</style>
<tabs>
<tab window="notebook_1_pane_1">notebook_1_pane_1</tab>
<tab window="notebook_1_pane_2">notebook_1_pane_2</tab>
<tab window="notebook_1_pane_3">notebook_1_pane_3</tab>
<tab window="notebook_1_pane_4">notebook_1_pane_4</tab>
</tabs>
<object class="wxPanel" name="notebook_1_pane_1" base="EditPanel">
<style>wxTAB_TRAVERSAL</style>
</object>
<object class="wxPanel" name="notebook_1_pane_2" base="EditPanel">
<style>wxTAB_TRAVERSAL</style>
</object>
<object class="wxPanel" name="notebook_1_pane_3" base="EditPanel">
<style>wxTAB_TRAVERSAL</style>
</object>
<object class="wxPanel" name="notebook_1_pane_4" base="EditPanel">
<style>wxTAB_TRAVERSAL</style>
</object>
</object>
</object>
<object class="sizeritem">
<span>2, 1</span>
<border>0</border>
<flag>wxEXPAND</flag>
<object class="wxGridBagSizer" name="grid_sizer_3" base="EditGridBagSizer">
<rows>2</rows>
<cols>1</cols>
<vgap>10</vgap>
<hgap>0</hgap>
<object class="sizeritem">
<border>0</border>
<flag>wxEXPAND</flag>
<object class="wxGridBagSizer" name="grid_sizer_4" base="EditGridBagSizer">
<rows>3</rows>
<cols>1</cols>
<vgap>0</vgap>
<hgap>0</hgap>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_1" base="EditButton">
<label>button_1</label>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_2" base="EditButton">
<label>button_2</label>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_3" base="EditButton">
<label>button_3</label>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<flag>wxEXPAND</flag>
<object class="wxGridBagSizer" name="grid_sizer_5" base="EditGridBagSizer">
<rows>3</rows>
<cols>1</cols>
<vgap>0</vgap>
<hgap>0</hgap>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_7" base="EditButton">
<label>button_7</label>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_8" base="EditButton">
<label>button_8</label>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_9" base="EditButton">
<label>button_9</label>
</object>
</object>
</object>
</object>
</object>
</object>
<object class="sizerslot" />
<object class="sizeritem">
<border>0</border>
<flag>wxEXPAND</flag>
<object class="wxGridBagSizer" name="grid_sizer_2" base="EditGridBagSizer">
<rows>1</rows>
<cols>3</cols>
<vgap>0</vgap>
<hgap>0</hgap>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_4" base="EditButton">
<label>button_4</label>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_5" base="EditButton">
<label>button_5</label>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_6" base="EditButton">
<label>button_6</label>
</object>
</object>
</object>
</object>
<object class="sizerslot" />
</object>
</object>
</object>
</application>

174
trial2/wxglade.wxg~ Normal file
View File

@ -0,0 +1,174 @@
<?xml version="1.0"?>
<!-- generated by wxGlade 1.0.2 on Sun Jul 4 21:21:09 2021 -->
<application class="MyApp" encoding="UTF-8" for_version="3.0" header_extension=".h" indent_amount="4" indent_symbol="space" is_template="0" language="python" mark_blocks="1" name="app" option="0" overwrite="1" path="./wxglade_out.py" source_extension=".cpp" top_window="frame" use_gettext="0" use_new_namespace="1">
<object class="MyFrame" name="frame" base="EditFrame">
<size>474, 290</size>
<title>frame</title>
<style>wxDEFAULT_FRAME_STYLE</style>
<menubar>1</menubar>
<object class="wxMenuBar" name="frame_menubar" base="EditMenuBar">
<menus>
</menus>
</object>
<object class="wxPanel" name="panel_1" base="EditPanel">
<object class="wxGridBagSizer" name="grid_sizer_1" base="EditGridBagSizer">
<rows>2</rows>
<cols>3</cols>
<vgap>0</vgap>
<hgap>0</hgap>
<object class="sizeritem">
<span>2, 1</span>
<border>0</border>
<flag>wxEXPAND</flag>
<object class="wxBoxSizer" name="sizer_1" base="EditBoxSizer">
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<option>0</option>
<border>0</border>
<object class="wxStaticText" name="label_1" base="EditStaticText">
<label>Text1</label>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<border>0</border>
<object class="wxStaticText" name="label_2" base="EditStaticText">
<label>Für</label>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<border>0</border>
<object class="wxStaticText" name="label_3" base="EditStaticText">
<label>Statis</label>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<flag>wxEXPAND</flag>
<object class="wxNotebook" name="notebook_1" base="EditNotebook">
<style>wxNB_TOP</style>
<tabs>
<tab window="notebook_1_pane_1">notebook_1_pane_1</tab>
<tab window="notebook_1_pane_2">notebook_1_pane_2</tab>
<tab window="notebook_1_pane_3">notebook_1_pane_3</tab>
<tab window="notebook_1_pane_4">notebook_1_pane_4</tab>
</tabs>
<object class="wxPanel" name="notebook_1_pane_1" base="EditPanel">
<style>wxTAB_TRAVERSAL</style>
</object>
<object class="wxPanel" name="notebook_1_pane_2" base="EditPanel">
<style>wxTAB_TRAVERSAL</style>
</object>
<object class="wxPanel" name="notebook_1_pane_3" base="EditPanel">
<style>wxTAB_TRAVERSAL</style>
</object>
<object class="wxPanel" name="notebook_1_pane_4" base="EditPanel">
<style>wxTAB_TRAVERSAL</style>
</object>
</object>
</object>
<object class="sizeritem">
<span>2, 1</span>
<border>0</border>
<flag>wxEXPAND</flag>
<object class="wxGridBagSizer" name="grid_sizer_3" base="EditGridBagSizer">
<rows>2</rows>
<cols>1</cols>
<vgap>10</vgap>
<hgap>0</hgap>
<object class="sizeritem">
<border>0</border>
<flag>wxEXPAND</flag>
<object class="wxGridBagSizer" name="grid_sizer_4" base="EditGridBagSizer">
<rows>3</rows>
<cols>1</cols>
<vgap>0</vgap>
<hgap>0</hgap>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_1" base="EditButton">
<label>button_1</label>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_2" base="EditButton">
<label>button_2</label>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_3" base="EditButton">
<label>button_3</label>
</object>
</object>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<flag>wxEXPAND</flag>
<object class="wxGridBagSizer" name="grid_sizer_5" base="EditGridBagSizer">
<rows>3</rows>
<cols>1</cols>
<vgap>0</vgap>
<hgap>0</hgap>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_7" base="EditButton">
<label>button_7</label>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_8" base="EditButton">
<label>button_8</label>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_9" base="EditButton">
<label>button_9</label>
</object>
</object>
</object>
</object>
</object>
</object>
<object class="sizerslot" />
<object class="sizeritem">
<border>0</border>
<flag>wxEXPAND</flag>
<object class="wxGridBagSizer" name="grid_sizer_2" base="EditGridBagSizer">
<rows>1</rows>
<cols>3</cols>
<vgap>0</vgap>
<hgap>0</hgap>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_4" base="EditButton">
<label>button_4</label>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_5" base="EditButton">
<label>button_5</label>
</object>
</object>
<object class="sizeritem">
<border>0</border>
<object class="wxButton" name="button_6" base="EditButton">
<label>button_6</label>
</object>
</object>
</object>
</object>
<object class="sizerslot" />
</object>
</object>
</object>
</application>

138
trial2/wxglade_out.py Normal file
View File

@ -0,0 +1,138 @@
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
#
# generated by wxGlade 1.0.2 on Sun Jul 4 21:29:50 2021
#
import wx
# begin wxGlade: dependencies
# end wxGlade
# begin wxGlade: extracode
# end wxGlade
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MyFrame.__init__
kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.SetSize((1920, 1080))
self.SetTitle("frame")
# Menu Bar
self.frame_menubar = wx.MenuBar()
wxglade_tmp_menu = wx.Menu()
wxglade_tmp_menu.Append(wx.ID_ANY, "Quit", "")
self.frame_menubar.Append(wxglade_tmp_menu, "File")
self.SetMenuBar(self.frame_menubar)
# Menu Bar end
self.frame_statusbar = self.CreateStatusBar(1)
self.frame_statusbar.SetStatusWidths([-1])
# statusbar fields
frame_statusbar_fields = ["frame_statusbar"]
for i in range(len(frame_statusbar_fields)):
self.frame_statusbar.SetStatusText(frame_statusbar_fields[i], i)
# Tool Bar
self.frame_toolbar = wx.ToolBar(self, -1)
self.SetToolBar(self.frame_toolbar)
self.frame_toolbar.Realize()
# Tool Bar end
self.panel_1 = wx.Panel(self, wx.ID_ANY)
grid_sizer_1 = wx.GridBagSizer(0, 0)
sizer_1 = wx.BoxSizer(wx.VERTICAL)
grid_sizer_1.Add(sizer_1, (0, 0), (2, 1), wx.EXPAND, 0)
label_1 = wx.StaticText(self.panel_1, wx.ID_ANY, "Text1")
sizer_1.Add(label_1, 0, 0, 0)
label_2 = wx.StaticText(self.panel_1, wx.ID_ANY, u"Für")
sizer_1.Add(label_2, 0, 0, 0)
label_3 = wx.StaticText(self.panel_1, wx.ID_ANY, "Statis")
sizer_1.Add(label_3, 0, 0, 0)
self.notebook_1 = wx.Notebook(self.panel_1, wx.ID_ANY)
grid_sizer_1.Add(self.notebook_1, (0, 1), (1, 1), wx.EXPAND, 0)
self.notebook_1_pane_1 = wx.Panel(self.notebook_1, wx.ID_ANY)
self.notebook_1.AddPage(self.notebook_1_pane_1, "notebook_1_pane_1")
self.notebook_1_pane_2 = wx.Panel(self.notebook_1, wx.ID_ANY)
self.notebook_1.AddPage(self.notebook_1_pane_2, "notebook_1_pane_2")
self.notebook_1_pane_3 = wx.Panel(self.notebook_1, wx.ID_ANY)
self.notebook_1.AddPage(self.notebook_1_pane_3, "notebook_1_pane_3")
self.notebook_1_pane_4 = wx.Panel(self.notebook_1, wx.ID_ANY)
self.notebook_1.AddPage(self.notebook_1_pane_4, "notebook_1_pane_4")
grid_sizer_3 = wx.GridBagSizer(10, 0)
grid_sizer_1.Add(grid_sizer_3, (0, 2), (2, 1), wx.EXPAND, 0)
grid_sizer_4 = wx.GridBagSizer(0, 0)
grid_sizer_3.Add(grid_sizer_4, (0, 0), (1, 1), wx.EXPAND, 0)
self.button_1 = wx.Button(self.panel_1, wx.ID_ANY, "button_1")
grid_sizer_4.Add(self.button_1, (0, 0), (1, 1), 0, 0)
self.button_2 = wx.Button(self.panel_1, wx.ID_ANY, "button_2")
grid_sizer_4.Add(self.button_2, (1, 0), (1, 1), 0, 0)
self.button_3 = wx.Button(self.panel_1, wx.ID_ANY, "button_3")
grid_sizer_4.Add(self.button_3, (2, 0), (1, 1), 0, 0)
grid_sizer_5 = wx.GridBagSizer(0, 0)
grid_sizer_3.Add(grid_sizer_5, (1, 0), (1, 1), wx.EXPAND, 0)
self.button_7 = wx.Button(self.panel_1, wx.ID_ANY, "button_7")
grid_sizer_5.Add(self.button_7, (0, 0), (1, 1), 0, 0)
self.button_8 = wx.Button(self.panel_1, wx.ID_ANY, "button_8")
grid_sizer_5.Add(self.button_8, (1, 0), (1, 1), 0, 0)
self.button_9 = wx.Button(self.panel_1, wx.ID_ANY, "button_9")
grid_sizer_5.Add(self.button_9, (2, 0), (1, 1), 0, 0)
grid_sizer_2 = wx.GridBagSizer(0, 0)
grid_sizer_1.Add(grid_sizer_2, (1, 1), (1, 1), wx.EXPAND, 0)
self.button_4 = wx.Button(self.panel_1, wx.ID_ANY, "button_4")
grid_sizer_2.Add(self.button_4, (0, 0), (1, 1), 0, 0)
self.button_5 = wx.Button(self.panel_1, wx.ID_ANY, "button_5")
grid_sizer_2.Add(self.button_5, (0, 1), (1, 1), 0, 0)
self.button_6 = wx.Button(self.panel_1, wx.ID_ANY, "button_6")
grid_sizer_2.Add(self.button_6, (0, 2), (1, 1), 0, 0)
self.panel_1.SetSizer(grid_sizer_1)
self.Layout()
# end wxGlade
def test(self, event): # wxGlade: MyFrame.<event_handler>
print("Event handler 'test' not implemented!")
event.Skip()
# end of class MyFrame
class MyApp(wx.App):
def OnInit(self):
self.frame = MyFrame(None, wx.ID_ANY, "")
self.SetTopWindow(self.frame)
self.frame.Show()
return True
# end of class MyApp
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()

117
trial2/wxglade_out.py~ Normal file
View File

@ -0,0 +1,117 @@
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
#
# generated by wxGlade 1.0.2 on Sun Jul 4 21:20:06 2021
#
import wx
# begin wxGlade: dependencies
# end wxGlade
# begin wxGlade: extracode
# end wxGlade
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: MyFrame.__init__
kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.SetSize((474, 290))
self.SetTitle("frame")
# Menu Bar
self.frame_menubar = wx.MenuBar()
self.SetMenuBar(self.frame_menubar)
# Menu Bar end
self.panel_1 = wx.Panel(self, wx.ID_ANY)
grid_sizer_1 = wx.GridBagSizer(0, 0)
sizer_1 = wx.BoxSizer(wx.VERTICAL)
grid_sizer_1.Add(sizer_1, (0, 0), (2, 1), wx.EXPAND, 0)
label_1 = wx.StaticText(self.panel_1, wx.ID_ANY, "Text1")
sizer_1.Add(label_1, 0, 0, 0)
label_2 = wx.StaticText(self.panel_1, wx.ID_ANY, u"Für")
sizer_1.Add(label_2, 0, 0, 0)
label_3 = wx.StaticText(self.panel_1, wx.ID_ANY, "Statis")
sizer_1.Add(label_3, 0, 0, 0)
self.notebook_1 = wx.Notebook(self.panel_1, wx.ID_ANY)
grid_sizer_1.Add(self.notebook_1, (0, 1), (1, 1), wx.EXPAND, 0)
self.notebook_1_pane_1 = wx.Panel(self.notebook_1, wx.ID_ANY)
self.notebook_1.AddPage(self.notebook_1_pane_1, "notebook_1_pane_1")
self.notebook_1_pane_2 = wx.Panel(self.notebook_1, wx.ID_ANY)
self.notebook_1.AddPage(self.notebook_1_pane_2, "notebook_1_pane_2")
self.notebook_1_pane_3 = wx.Panel(self.notebook_1, wx.ID_ANY)
self.notebook_1.AddPage(self.notebook_1_pane_3, "notebook_1_pane_3")
self.notebook_1_pane_4 = wx.Panel(self.notebook_1, wx.ID_ANY)
self.notebook_1.AddPage(self.notebook_1_pane_4, "notebook_1_pane_4")
grid_sizer_3 = wx.GridBagSizer(10, 0)
grid_sizer_1.Add(grid_sizer_3, (0, 2), (2, 1), wx.EXPAND, 0)
grid_sizer_4 = wx.GridBagSizer(0, 0)
grid_sizer_3.Add(grid_sizer_4, (0, 0), (1, 1), wx.EXPAND, 0)
self.button_1 = wx.Button(self.panel_1, wx.ID_ANY, "button_1")
grid_sizer_4.Add(self.button_1, (0, 0), (1, 1), 0, 0)
self.button_2 = wx.Button(self.panel_1, wx.ID_ANY, "button_2")
grid_sizer_4.Add(self.button_2, (1, 0), (1, 1), 0, 0)
self.button_3 = wx.Button(self.panel_1, wx.ID_ANY, "button_3")
grid_sizer_4.Add(self.button_3, (2, 0), (1, 1), 0, 0)
grid_sizer_5 = wx.GridBagSizer(0, 0)
grid_sizer_3.Add(grid_sizer_5, (1, 0), (1, 1), wx.EXPAND, 0)
self.button_7 = wx.Button(self.panel_1, wx.ID_ANY, "button_7")
grid_sizer_5.Add(self.button_7, (0, 0), (1, 1), 0, 0)
self.button_8 = wx.Button(self.panel_1, wx.ID_ANY, "button_8")
grid_sizer_5.Add(self.button_8, (1, 0), (1, 1), 0, 0)
self.button_9 = wx.Button(self.panel_1, wx.ID_ANY, "button_9")
grid_sizer_5.Add(self.button_9, (2, 0), (1, 1), 0, 0)
grid_sizer_2 = wx.GridBagSizer(0, 0)
grid_sizer_1.Add(grid_sizer_2, (1, 1), (1, 1), wx.EXPAND, 0)
self.button_4 = wx.Button(self.panel_1, wx.ID_ANY, "button_4")
grid_sizer_2.Add(self.button_4, (0, 0), (1, 1), 0, 0)
self.button_5 = wx.Button(self.panel_1, wx.ID_ANY, "button_5")
grid_sizer_2.Add(self.button_5, (0, 1), (1, 1), 0, 0)
self.button_6 = wx.Button(self.panel_1, wx.ID_ANY, "button_6")
grid_sizer_2.Add(self.button_6, (0, 2), (1, 1), 0, 0)
self.panel_1.SetSizer(grid_sizer_1)
self.Layout()
# end wxGlade
# end of class MyFrame
class MyApp(wx.App):
def OnInit(self):
self.frame = MyFrame(None, wx.ID_ANY, "")
self.SetTopWindow(self.frame)
self.frame.Show()
return True
# end of class MyApp
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()

View File

@ -53,8 +53,8 @@ class PlotPanel(wx.Panel):
def init_plot_data(self): def init_plot_data(self):
self.ax = self.fig.add_subplot() self.ax = self.fig.add_subplot()
self.fig.legend() self.fig.legend()
self.x, self.y = self.model.sensors["temp"].get_data dat = self.model.plot_data
(self.im,) = self.ax.plot(self.x, self.y, "-.",label="temp") (self.im,) = self.ax.plot(dat.get("time"), dat.get("temp"), "-.",label="temp")
self.toolbar.update() # Not sure why this is needed - ADS self.toolbar.update() # Not sure why this is needed - ADS
def get_toolbar(self): def get_toolbar(self):
@ -63,9 +63,10 @@ class PlotPanel(wx.Panel):
return self.toolbar return self.toolbar
def on_paint(self, event): def on_paint(self, event):
self.x, self.y = self.model.sensors["temp"].get_data dat = self.model.plot_data.data
# print(self.x) # print(self.x)
self.im.set_data(self.x, self.y)
self.im.set_data(dat.get("time"), dat.get("temp"))
self.ax.relim() self.ax.relim()
self.ax.autoscale_view() self.ax.autoscale_view()
self.canvas.draw() self.canvas.draw()