Code in tkinter übertragen

Fragen zu Tkinter.
Antworten
mabe91
User
Beiträge: 1
Registriert: Freitag 2. Februar 2018, 11:32

Freitag 2. Februar 2018, 12:28

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
Sirius3
User
Beiträge: 8433
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 2. Februar 2018, 13:42

@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.
Antworten