Alles was Du in anderen Methoden verwenden willst, mußt Du an `self` binden.
ubatlogger und pressure ändern die Daten in ›df_all‹. Das heißt, beim zweiten mal Aufrufen kommt quatsch raus.
›ubatlooger‹ und ›pressure‹ sind bis auf 3 Werte identisch, können also in einer Funktion zusammengefasst werden.
Magische Werte sollten nicht irgendwo im Code auftauchen, sondern als Konstanten herausgezogen werden, damit der Code leichter lesbar wird.
Statt aus .ui-Dateien .py-Dateien zu erzeugen, solltest Du loadUI benutzen.
Code: Alles auswählen
DEFAULT_PATTERN = "I:\\*.asc"
OUTPUT_FILENAME = "data.html"
UBAT_LOGGER_TAG = "800200BA"
PRESSURE_TAG = "80083DCE"
UBAT_FACTOR = (5/4095)*8.655106
PRESSURE_FACTOR = 0.00257038
PRESSURE_OFFSET = -2*PRESSURE_FACTOR - 0.5
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent = None):
super().__init__(parent)
self.setWindowTitle("Bosch")
self.ui = loadUi("mainwindow.ui", self)
self.ui.choose_button.clicked.connect(self.choose_button)
self.ui.ubatlogger.clicked.connect(functools.partial(self.plot_data, "Ubatlogger", UBAT_LOGGER_TAG, lambda x: x*UBAT_FACTOR))
self.ui.pressure.clicked.connect(functools.partial(self.plot_data, "Pressure", PRESSURE_TAG, lambda x: x*PRESSURE_FACTOR + PRESSURE_OFFSET)
self.fig = go.Figure()
self.data = None
def choose_button(self):
# Datei auswählen und trennen
filename = easygui.fileopenbox(msg="Please locate the asc file", title="Specify File", default=DEFAULT_PATTERN)
self.data = pd.read_csv(filename, skiprows=5, delimiter=";", converters={' DATA L': partial(int, base=16)})
def plot_data(self, name, tag, convert):
selected_data = self.data[self.data[" DATA H"] == tag]
time = selected_data[" Offset[s]"]
values = convert(selected_data[" DATA L"])
self.fig.add_trace(go.Scatter(x=time, y=values, mode="lines", name=name))
def on_html_click(self):
plotly.offline.plot(self.fig, filename=OUTPUT_FILENAME, auto_open=False)