Canvas Buttons verschieben

Fragen zu Tkinter.
Antworten
Phobit
User
Beiträge: 185
Registriert: Freitag 4. Mai 2018, 18:13

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!
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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 ;-)
Take it easy Mates!
Antworten