Не работают кнопки передвижение обекта python

Рейтинг: 0Ответов: 1Опубликовано: 02.03.2023
from tkinter import *

win = Tk()
win.title('Танки 1998')
win.geometry(f'600x600')
win.resizable(False,False)
win['bg'] = 'black'
bg = Canvas(win, bg='black',width=600,height=600)
bg.pack() 
h=600
w=600
class Wall():
    def __init__(self,x_1,y_1,x_2,y_2):
        self.x_1 = x_1
        self.y_1 = y_1
        self.x_2 = x_2
        self.y_2 = y_2
        bg.create_rectangle(x_1,y_1,x_2,y_2,fill='brown',outline='gray')
        # bg.create_line(x_1,x_2,(y_2-y_1)/3,fill='white')#Сделать дизайн стенам

        
wall_1 = Wall(50,50,100,550)
wall_2 = Wall(50,50,250,100)
wall_4 = Wall(500,50,550,550)
wall_3 = Wall(350,50,550,100)
wall_5 = Wall(50,500,250,550)
wall_6 = Wall(350,500,550,550)


class Tank:
    def __init__(self):
        self.x = 270
        self.y= 570
        self.v = 0
        self.photo_tank = PhotoImage(file='tank.png')
    def up(self, event):
        self.v = -3
    def down(self, event):
        self.v = 3
    def stop(self, event):
        self.v = 0




tank = Tank()



def game():
    bg.create_image(tank.x,tank.y, image=tank.photo_tank)
    tank.y += tank.v
    
game()


win.bind('<Key-Up>', tank.up)
win.bind('<Key-Down>', tank.down)
win.bind('<KeyRelease>', tank.stop)


win.mainloop()[![World of tanks][1]][1]

Ответы

▲ 0Принят

Стоило чуть переделать логику. Вам не нужно событие отпускания, а так же зачем создавать функции вне класса, когда можно все сделать в классе.

from tkinter import *

win = Tk()
win.title('Танки 1998')
win.geometry(f'600x600')
win.resizable(False, False)
win['bg'] = 'black'
bg = Canvas(win, bg='black', width=600, height=600)
bg.pack()
h = 600
w = 600


class Wall():
    def __init__(self, x_1, y_1, x_2, y_2):
        self.x_1 = x_1
        self.y_1 = y_1
        self.x_2 = x_2
        self.y_2 = y_2
        bg.create_rectangle(x_1, y_1, x_2, y_2, fill='brown', outline='gray')
        # bg.create_line(x_1,x_2,(y_2-y_1)/3,fill='white')#Сделать дизайн стенам


wall_1 = Wall(50, 50, 100, 550)
wall_2 = Wall(50, 50, 250, 100)
wall_4 = Wall(500, 50, 550, 550)
wall_3 = Wall(350, 50, 550, 100)
wall_5 = Wall(50, 500, 250, 550)
wall_6 = Wall(350, 500, 550, 550)


class Tank:
    def __init__(self):
        self.x = 270
        self.y = 570
        self.photo_tank = PhotoImage(file='tank.png')
        self.rect = bg.create_image(self.x, self.y, image=self.photo_tank)

    def up(self, event):
        bg.move(self.rect, 0, -3)

    def down(self, event):
        bg.move(self.rect, 0, 3)


tank = Tank()

win.bind('<Key-Up>', tank.up)
win.bind('<Key-Down>', tank.down)

win.mainloop()