ich versuche einen Sensorwert zu erfassen und diesen später mit Hilfe von Matplotlib in einem Toplevel-Fenster darzustellen.
Die einzelnen Programmteile funktionieren bei mir. Also eine GUI, wo ich per Button ein Toplevel erstelle und eine GUI wo ich einen Graphen mit Matplotlib darstelle. Jetzt wollte ich die beiden Programmteile mit einander verbinden und bekomme folgende Fehlermeldung:
Was mache ich falsch?Traceback (most recent call last):
File "/home/pi/PythonProgramme/Wallbox/GUI_Matplotlib.py", line 66, in <module>
canvas = FigureCanvasTkAgg(fig, master = gui)
File "/usr/local/lib/python3.5/dist-packages/matplotlib/backends/_backend_tk.py", line 211, in __init__
width=w, height=h, borderwidth=0, highlightthickness=0)
File "/usr/lib/python3.5/tkinter/__init__.py", line 2257, in __init__
Widget.__init__(self, master, 'canvas', cnf, kw)
File "/usr/lib/python3.5/tkinter/__init__.py", line 2144, in __init__
BaseWidget._setup(self, master, cnf)
File "/usr/lib/python3.5/tkinter/__init__.py", line 2122, in _setup
self.tk = master.tk
AttributeError: 'GUI' object has no attribute 'tk'
Code: Alles auswählen
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk
import random
GUI_WIN_TITLE = 'Test'
GUI_BACK_GND = 'white'
class GUI(object):
def __init__(self):
self.win = tk.Tk()
self.win.protocol("WM_DELETE_WINDOW", self.close)
self.win.config(bg=GUI_BACK_GND)
self.win.title(GUI_WIN_TITLE)
def create_info_win(self):
top_win_info = tk.Toplevel()
#top_win.update_idletasks()
#self.top_win_collector.append(top_win)
top_win_info.title("Info")
#top_win.update_idletasks()
def create_diagram_win(self):
top_win_diagram = tk.Toplevel()
#top_win.update_idletasks()
#self.top_win_collector.append(top_win)
top_win_diagram.title("Diagram")
#top_win.update_idletasks()
def updateTemp(self, temp, label):
label.config(text= "T = " + temp + " °C")
def close(self):
self.win.destroy()
print ("Shut down application")
def run(self):
self.win.mainloop()
# Hauptprogramm - Testumgebung
if __name__ == '__main__':
''' Daten für den Graphen '''
fig = Figure(figsize = (9, 6), facecolor = "white")
axis = fig.add_subplot(111)
power = list()
time = list()
for i in range(1, 20):
power.append(random.randint(0, 10))
time.append(i)
axis.plot(time, power, "-b", label = "Power")
gui = GUI()
canvas = FigureCanvasTkAgg(fig, master = gui)
canvas._tkcanvas.pack(side = tk.TOP, fill = tk.BOTH, expand = 1)
labelTemp = tk.Label(gui.win, text='Temperatur')
labelTemp.pack()
# Erstelle weitere Toplevel-Fenster
tk.Button(gui.win, text='Info', command=gui.create_info_win).pack()
tk.Button(gui.win, text='Diagramme', command=gui.create_diagram_win).pack()
# Schließen
tk.Button(gui.win, text='Schließen', command=gui.close).pack()
# Anzeige aktualisieren
gui.updateTemp("18", labelTemp)
gui.run()