Seite 1 von 1

Canvas Buttons verschieben

Verfasst: Freitag 15. Juni 2018, 16:30
von Phobit
Huhu allerseits,
kurze Frage.
Wenn ich mit Canvas einen tkinter Button über mein Hintergrundbild lege, also mit

Code: Alles auswählen

canvas.create_window(10, 10, window=BUTTONNAME, anchor="nw")
wie kann ich den dann wieder verschieben?
ich weiß dass es da etwas mit canvas.config gibt, aber irgendwie komm ich damit nicth klar und die Tutorials im Internet helfen nicht besonders...Hier vllt jemand der weiß wie der genaue Befehl aussehen würde um einen Button an eine andere Position zu rücken?

Grüße und danke im Vorraus!

Re: Canvas Buttons verschieben

Verfasst: Freitag 15. Juni 2018, 17:48
von __blackjack__
Du musst Dir den Rückgabewert von der `create_window()`-Methode merken, denn irgendwie musst Du ja später angeben *was* Du verändern willst. Und dann ist das nicht `Canvas.config()` sondern `Canvas.coords()` um die Koordinaten auf andere Werte zu setzen. Lesestoff: Canvas bei Effbot.

Re: Canvas Buttons verschieben

Verfasst: Freitag 15. Juni 2018, 20:23
von wuf
Hi Phobit

Hier ein Testskript:

Code: Alles auswählen

import tkinter as tk


class Application(tk.Canvas):

    def __init__(self, app_win):
        self.app_win = app_win
        tk.Canvas.__init__(self, app_win, bg='steelblue', highlightthickness=0)
        
        button = tk.Button(self, text="Button-1", highlightthickness=0)
        self.create_window(10, 10, window=button, anchor="nw", tag='button1')

        button = tk.Button(self, text="Button-2", highlightthickness=0)
        self.create_window(10, 50, window=button, anchor="nw", tag='button2')
        
        self.move_button()
        
    def move_button(self, steps=30):
        self.move('button1',5 , 3)
        xpos, ypos = self.coords('button2')
        xpos += 5
        ypos += 3
        self.coords('button2', xpos, ypos)
        if steps > 0:
            self.app_win.after(100, self.move_button, steps - 1)

           
def main():
    app_win = tk.Tk()
    app_win.title("Move Canvas Buttons")
    
    app = Application(app_win)
    app.pack(fill='both', expand=True)
    
    app_win.mainloop()
 
 
if __name__ == '__main__':
    main()
Gruss wuf ;-)