Grafik löschen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
WvonRiedi
User
Beiträge: 36
Registriert: Mittwoch 20. Januar 2021, 20:46

Ich möchte gerne eine Grafik löschen um danach eine ander anzuzeigen.

Mein Code geht so nicht.

Code: Alles auswählen

from tkinter import ttk,Tk,Button,Canvas
from matplotlib.figure import Figure 
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg) 

fenster = Tk()

fenster.geometry("650x350")

fig = Figure(
    figsize = (5, 3),
    dpi = 100
    ) 

y = [5,10,15,20,25,30] 

plot1 = fig.add_subplot() 

plot1.hist(y) 

canvas = FigureCanvasTkAgg(
    fig,
    master = fenster) 
canvas.draw() 
canvas.get_tk_widget().pack() 


def löschen():
    Canvas.delete("all")
    #plot1.delete("all")

löschen_button = Button(text='löschen',command=löschen)#, command=löschen)
    
Canvas.pack
löschen_button.pack()
fenster.mainloop()
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn der Code nicht geht, wäre es noch hilfreich, die Fehlermeldung gleich mit zu posten.
Du verwechselst hier Canvas mit canvas, wobei Canvas gar nicht benutzt wird.
Woher hast Du die Information, dass ein `canvas` eine `delete`-Methode hat, oder dass sich ein FigureCanvasTkAgg wie ein tk.Canvas verhält? Man kann nicht einfach Methoden erfinden und hoffen, dass sie sie funktionieren.
Was soll die 1 bei plot1?
Man benutzt keine globalen Variablen, alles was eine Funktion braucht, muß sie auch über ihre Argumente bekommen.
Aller ausführbarer Code auf oberster Ebene muß in eine Funktion verschoben werden.

Code: Alles auswählen

from tkinter import Tk,Button
from matplotlib.figure import Figure 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from functools import partial

def löschen(canvas):
    canvas.figure.clear()
    canvas.draw()

def main():
    fenster = Tk()
    fenster.geometry("650x350")
    figure = Figure(figsize=(5, 3), dpi=100) 

    y = [5,10,15,20,25,30] 
    plot = fig.add_subplot() 
    plot.hist(y) 
    canvas = FigureCanvasTkAgg(fig, master=fenster) 
    canvas.draw() 
    canvas.get_tk_widget().pack() 
    Button(text='löschen', command=partial(löschen, canvas)).pack()
    fenster.mainloop()

if __name__ == "__main__":
    main()
WvonRiedi
User
Beiträge: 36
Registriert: Mittwoch 20. Januar 2021, 20:46

Herzlichen Dank. Darauf kann ich aufbauen.
Woher hast Du...
Fand im Internet dieesen Code und dachte ich müsse es nur bei meinem Diagram anwenden.

Code: Alles auswählen

from tkinter import *

#Create an instance of tkinter frame
win = Tk()

#Set the geometry
win.geometry("650x250")

#Creating a canvas
myCanvas =Canvas(win, bg="white", height=200, width=200)
cordinates= 10, 10, 200, 200
arc = myCanvas.create_arc(cordinates, start=0, extent=320, fill="red")


def löschen():
    myCanvas.delete('all')

löschen_button = Button(text='löschen',command=löschen))
    
myCanvas.pack()    
löschen_button.pack()
win.mainloop()
War mir nicht bewusst, dass Cavas mit C oder c eine untersied ist.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Alles in Python ist unterschiedlich abhaengig von der Gross/Kleinschreibung.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

@WvonRiedi: Es gibt einen Style Guide ( PEP 8 ) für Python. Es lohnt sich, den einmal gelese zu haben. Darin wird unter anderem auf die Konvention hingewiesen, wie Namen geschrieben werden. Bezüglich der Großschreibung gilt: Namen werden in Python klein_mit_Unterstrich geschrieben. Ausgenommen sind Namen von Klassen (PascalCase) und Konstanten (KOMPLETT_GROSS). Hält man sich an die Konvention, hat der Leser (und das ist man im Zweifelsfall selbst) einen Hinweis, was sich dahinter verbirgt.
WvonRiedi
User
Beiträge: 36
Registriert: Mittwoch 20. Januar 2021, 20:46

Danke für die Infos. :D
Antworten