Tkinter ile resim hareket ettirme

Merhabalar, Python’da yeni sayılırım. Bir proje denemek istedim. Tkinter ile olduştuduğum pencere içerisine koyduğum resmin butona bastığım zaman ileri gitmesini istiyorum.

from threading import Thread
from tkinter import *
from time import sleep


a = Tk()
a.geometry("300x200")
a.title("ilk oyun denemem")
a.grid()


foto = PhotoImage( file = "ma.png")
resim = Label(a, image = foto)
resim.place(relx = 0.2, rely = 0.2)



button1 = Button()
button1.config(text = "ileri")
button1.place(relx = 0.91, rely = 0.75)



def start(event):
    global hold_on1
    hold_on1 = True
    while hold_on1:
        if hold_on1 == True:
            t = 0
            while t <=0.5:
                   print(t)
                   t = t+0.01
                   sleep(0.1)
        
            
        
def end(event):
    global hold_on1
    hold_on1 = False
    if hold_on1 == False:
        print("DUR")

        

button1.bind(
    "<ButtonPress>", 
    lambda event: Thread(target=start, args=(event, )).start()
)
button1.bind("<ButtonRelease>", end)

kodlarım bu şekilde. Resim için kullandığım “relx” ifadesini t’ye eşitleyip sayaç mantığı ile yükseltmeyi düşündüm. Başarılı olamadım. Resmi nasıl hareket ettirebilirim? Yardımlarınız için şimdiden teşekkürler

Merhaba, kodlarınızı aşağıdaki gibi değiştirdim, bir deneyim isterseniz.

import tkinter as tk

root = tk.Tk()
root.geometry("800x800")

relx = 0.2
on_hold = True

foto = tk.PhotoImage(file="img.png")
resim = tk.Label(root, image=foto)
resim.place(relx=relx, rely=0.2)

button1 = tk.Button(master=root, text="ileri")
button1.place(relx=0.91, rely=0.75)


def start(event):
    global on_hold, relx
    if not on_hold:
        on_hold = True
        return
    relx += 0.0001
    resim.place(relx=relx, rely=0.2)
    root.after(1, lambda: start(event))
    
    
def end(event):
    global on_hold
    on_hold = False
        
            
button1.bind("<ButtonPress>", start)
button1.bind("<ButtonRelease>", end)

root.mainloop()

ilginiz için gerçekten çok teşekkür ederim… sağolun

Mesela şu kodları da inceleyebilirsiniz. İleri, Geri, Yukarı, Aşağı için ayrı ayrı fonksiyon tanımlamanıza gerek yok.

import tkinter as tk

root = tk.Tk()
root.geometry("800x800")

relx = 0.2
rely = 0.2
on_hold = True

foto = tk.PhotoImage(file="img.png")
resim = tk.Label(root, image=foto)
resim.place(relx=relx, rely=0.2)

frames = []
for i in range(3):
    frame = tk.Frame(master=root)
    frame.pack()
    frames.append(frame)
    
buttons = []
for text, master in zip(
        ["ileri", "geri", "yukarı", "aşağı"],
        [frames[1], frames[1], frames[0], frames[2]]
):
    button = tk.Button(master=master, text=text)
    button.pack(side="right")
    buttons.append(button)


def start(event):
    global on_hold, relx, rely
    if not on_hold:
        on_hold = True
        return
    if event.widget["text"] == "ileri":
        relx += 0.0001
    elif event.widget["text"] == "geri":
        relx -= 0.0001
    elif event.widget["text"] == "yukarı":
        rely -= 0.0001
    elif event.widget["text"] == "aşağı":
        rely += 0.0001
    resim.place(relx=relx, rely=rely)
    root.after(1, lambda: start(event))
    
    
def end(event):
    global on_hold
    on_hold = False
        

for i in buttons:            
    i.bind("<ButtonPress>", start)
    i.bind("<ButtonRelease>", end)

root.mainloop()

Not: Hatta dilerseniz düğme yerine yön tuşları da kullanabilirsiniz. Ki bence daha iyi olur.

1 Beğeni

Evet çok daha kullanışlı görünüyor. Yardımlarınız için çok teşekkürler