Seite 1 von 1

Grafik löschen

Verfasst: Montag 16. Mai 2022, 23:50
von WvonRiedi
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()

Re: Grafik löschen

Verfasst: Dienstag 17. Mai 2022, 07:15
von Sirius3
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()

Re: Grafik löschen

Verfasst: Dienstag 17. Mai 2022, 07:53
von WvonRiedi
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.

Re: Grafik löschen

Verfasst: Dienstag 17. Mai 2022, 09:15
von __deets__
Alles in Python ist unterschiedlich abhaengig von der Gross/Kleinschreibung.

Re: Grafik löschen

Verfasst: Dienstag 17. Mai 2022, 10:58
von sparrow
@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.

Re: Grafik löschen

Verfasst: Dienstag 17. Mai 2022, 22:12
von WvonRiedi
Danke für die Infos. :D