Seite 1 von 1

Letzten Zeichenvorgang rückgängig machen

Verfasst: Sonntag 1. Juli 2018, 11:48
von Atalanttore
Hallo

Bei meinem aktuellen Projekt werden mit Tkinter diverse geometrische Formen auf dem Canvas gezeichnet.

Nun kommt es immer wieder vor, dass ich den zuletzt gemachten Zeichenvorgang gerne rückgängig machen bzw. die zuletzt gezeichnete geometrische Form wieder vom Canvas entfernen möchte. Bisher werden dazu immer wieder alle auf dem Canvas aktuell benötigten Formen einfach komplett neu gezeichnet.

Geht das auch eleganter?

Gruß
Atalanttore

Re: Letzten Zeichenvorgang rückgängig machen

Verfasst: Sonntag 1. Juli 2018, 12:08
von __deets__
Du bekommst für jedes Item eine Id, und kannst damit auch welche entfernen.

Re: Letzten Zeichenvorgang rückgängig machen

Verfasst: Sonntag 1. Juli 2018, 15:05
von Atalanttore
Danke. Das Löschen funktioniert jetzt.

Kann man ein vorher gelöschtes Objekt anhand der Item ID auch neu zeichnen?

Gruß
Atalanttore

Re: Letzten Zeichenvorgang rückgängig machen

Verfasst: Sonntag 1. Juli 2018, 15:57
von __deets__
Nein. Das ist dann weg. Bestenfalls gibt es einen “invisible” oder “disabled” status. Das müsstest du mal in der Doku nachschlagen.

Kann es sein, dass du undo/redo implementieren willst?

Re: Letzten Zeichenvorgang rückgängig machen

Verfasst: Sonntag 1. Juli 2018, 18:34
von Atalanttore
Undo/Redo wäre schon praktisch.

Gruß
Atalanttore

Re: Letzten Zeichenvorgang rückgängig machen

Verfasst: Sonntag 1. Juli 2018, 20:11
von __deets__
Praktisch ist vieles. Ist es das, was du umsetzen willst, und worauf sich deine Fragen beziehen?

Re: Letzten Zeichenvorgang rückgängig machen

Verfasst: Sonntag 1. Juli 2018, 20:14
von Atalanttore
Umsetzen möchte ich eigentlich eine Bewegung von geometrischen Formen auf dem Canvas.

Gruß
Atalanttore

Re: Letzten Zeichenvorgang rückgängig machen

Verfasst: Sonntag 1. Juli 2018, 20:21
von __deets__
Dann verstehe ich nicht, wozu du Dinge wiederherstellen willst. Du kannst mit der ID genauso gut das item auch bewegen.

Re: Letzten Zeichenvorgang rückgängig machen

Verfasst: Sonntag 1. Juli 2018, 21:08
von wuf
Hi Atalanttore

Du kannst natürlich an Stelle von ID's auch Tag's verwenden. Wenn du eine Methode gleichzeitig auf mehrere Canvas Objekte anwenden möchtest gibst du diesen Objekten den gleichen Tag Name. Zum Beispiel das gleichzeitige Verschieben dreier Objekte:

Code: Alles auswählen

import tkinter as tk

APP_TITLE = "Canvas Objekt bewegen"
APP_XPOS = 100
APP_YPOS = 100
APP_WIDTH = 350
APP_HEIGHT = 200


class Application(tk.Frame):

    def __init__(self, app_win):
        self.app_win = app_win
        tk.Frame.__init__(self, app_win)
        
        self.canvas = tk.Canvas(self, bg='steelblue')
        self.canvas.pack()
        
        xpos = 20
        ypos = 20
        xoffset = 50
        yoffset = 50
        for shape_nr, shape_color in enumerate(('yellow', 'red', 'green')):
            self.canvas.create_oval(xpos, ypos, xpos+100, ypos+100, width=1,
                fill=shape_color, tags='shapes')
            xpos += xoffset
            ypos += yoffset
        
        self.move_shapes()
            
    def move_shapes(self):
        self.canvas.move('shapes', 2, 1)
        self.app_win.after(100, self.move_shapes)
        
def main():
    app_win = tk.Tk()
    app_win.title(APP_TITLE)
    app_win.geometry("+{}+{}".format(APP_XPOS, APP_YPOS))
    #app_win.geometry("{}x{}".format(APP_WIDTH, APP_HEIGHT))
    app_win.option_add("*highlightThickness", 0)
    
    app = Application(app_win)
    app.pack(fill='both', expand=True)
    
    app_win.mainloop()
 
 
if __name__ == '__main__':
    main()
Gruss wuf ;-)

Re: Letzten Zeichenvorgang rückgängig machen

Verfasst: Dienstag 3. Juli 2018, 21:25
von Atalanttore
Danke für den Beispielcode. Den kann ich gut gebrauchen. :thumbsup:

Gruß
Atalanttore