Ich habe folgendes Problem mit meinem Programm. Ich habe ein micro:bit mit einem Sensor der den Puls messen soll. Diese Daten sollen in einem live Plot dargestellt werden (was auch funktioniert). Nun soll aber zu dem live Plot eine GUI mittels tkinter gebaut werden. Nun meine Frage: Wie kann ich den nachfolgenden Code in tkinter übertragen. Ich hab mir schon einiges durchgelesen aber noch nichts hilfreiches gefunden. Vielen Dank schonmal
#import math as m
import matplotlib
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
import time
import serial
ser = serial.Serial('COM4')
ser.baudrate = 115200
plt.ion() #enable interactive mode
x = 0
startzeit = time.time()
endzeit = 0 #default 0
zeitdaten = [endzeit - startzeit] #xwerte = []
print(zeitdaten)
rohdaten = [0] #rohdaten= []; rohdaten = np.array(0)
#ywerte2= []
#for i in range(10000):
# x = i/10
#xwerte.append(x)
# ywerte1.append(m.sin(x))
#ywerte2.append(m.cos(x))
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
#ax2 = fig.add_subplot(2,1,2)
plt.show(block = False)
fig = FigureCanvastkAgg(ser, self)
fig.show()
fig.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
line1, = ax1.plot(zeitdaten, rohdaten)
#line2, = ax2.plot(xwerte, ywerte2)
ax1.set_ylim(500,550)
#ax2.set_ylim(-2,2)
ax1.set_xlim(1,60)
#ax2.set_xlim(1,100)
while True:
endzeit = time.time()
zeitdaten.append(endzeit - startzeit) #zeitdaten.insert(x, endzeit - startzeit)
#if len(rohdaten) > 99:
# zeitdaten.pop(0)
try:
rohdaten.append(int(ser.readline())) #rohdaten.insert(x, int(ser.readline()))
#ywerte2.append(m.cos(x))
#if len(rohdaten) > 99:
# rohdaten.pop(0)
#ywerte2.pop(0)
print(rohdaten, " ", zeitdaten, "\n")
print("x: ", x, "\n")
line1.set_data(zeitdaten,rohdaten)
#line2.set_data(xwerte,ywerte2)
#X-Axis anpassen
#xstart = x #xstart = zeitdaten[0]
ax1.set_xlim(zeitdaten[x]-15 , zeitdaten[x]+15)
#ax2.set_xlim(xstart , xstart+10)
# jetzt die daten im Plot updaten
x += 1
fig.canvas.update()
fig.canvas.flush_events()
except:
print("EXCEPTION")
pass
Code in tkinter übertragen
@mabe91: wenn Du für Matplotlib schon QT5 benutzt, warum dann TkInter? Auf der Matplotlib-Seite gibt es einige Beispiele wie man es in verschiedenste Rahmenwerke einbindet.
Generell, bei GUIs darfst Du keine Endlosschleifen benutzen. Nakte Excepts vermeiden, weil sie auch viele Programmierfehler in ein Nichtssagendes 'EXCEPTION' umwandeln. `x` ist unnötig, weil es einfach nur die Länge der Liste rohdaten ist.
Generell, bei GUIs darfst Du keine Endlosschleifen benutzen. Nakte Excepts vermeiden, weil sie auch viele Programmierfehler in ein Nichtssagendes 'EXCEPTION' umwandeln. `x` ist unnötig, weil es einfach nur die Länge der Liste rohdaten ist.