Форум сайта python.su
Привет,я здесь недавно.заранее извиняюсь. Первый раз создаю простенькую-глупую игру в Tkinter. Я пытаюсь заставить кубик появляться после нажатия Enter'a,но не могу разобраться с двумя вещами:
bind выполняется в начале запуска программы
Как сделать, чтобы бинд относился и к каждому новому кубику, а не только к первому
P.S. Если не сложно, то расскажите как можно упросить и улучшить код
from tkinter import * root=Tk() def click(): c.delete("all") brick=c.create_polygon((135,135),(165,135),(165,165),(135,165),fill='black',outline='') c=Canvas(root, width=300,height=300,bg='grey') c.pack() c.focus_set() brick=c.create_polygon((135,135),(165,135),(165,165),(135,165),fill='black',outline='') def prov(): x=0 if c.coords(brick)[2]<25 or c.coords(brick)[2]>300 : c.delete(brick) text=c.create_text(150,150, text="Вы вышли за границы!\nНажмите Enter,чтобы начать!") c.bind('w',lambda e:c.move(brick,0,-30)) c.bind('w',lambda e:prov(), "+" ) c.bind('s',lambda e:c.move(brick,0,30),prov()) c.bind('s',lambda e:prov(),"+") c.bind('d',lambda e:c.move(brick,30,0),prov()) c.bind('d',lambda e:prov(),"+") c.bind('a',lambda e:c.move(brick,-30,0),prov()) c.bind('a',lambda e:prov(),"+") c.bind('x',lambda event:c.move(brick,30,30),prov()) c.bind('x',lambda event:prov(),"+") c.bind('z',lambda e:c.move(brick,-30,-30),prov()) c.bind('z',lambda e:prov(),"+") c.bind('<Enter>',lambda e:click()) root.mainloop()
Офлайн
E_off
P.S. Если не сложно, то расскажите как можно упросить и улучшить код
from tkinter import * def click(event): brick = canvas.create_polygon((135,135),(165,135),(165,165),(135,165),fill='black',outline='') root = Tk() canvas = Canvas(root, width=300, height=300, bg='grey') canvas.pack() canvas.focus_set() canvas.bind('<KeyRelease-Return>', click) root.mainloop()
Отредактировано m1r42 (Март 14, 2023 11:33:30)
Офлайн
m1r42Спасибо!
Офлайн
E_off
Спасибо!
А не знаешь как привязать движение к каждому новому кубику?
from tkinter import * def click(event): global brick canvas.delete('all') brick = canvas.create_polygon((135,135),(165,135),(165,165),(135,165),fill='black',outline='') def move(thing, e): brick = thing if e.keysym == 'w': canvas.move(brick,0,-30) elif e.keysym == 's': canvas.move(brick,0,30) elif e.keysym == 'a': canvas.move(brick,-30,0) elif e.keysym == 'd': canvas.move(brick,30,0) print(canvas.coords(brick)[2]) if canvas.coords(brick)[0]<25 or canvas.coords(brick)[2]>300 : canvas.delete(brick) text=canvas.create_text(150,150, text="Вы вышли за границы!\nНажмите Enter,чтобы начать!") root=Tk() canvas = Canvas(root, width=300, height=300, bg='grey') canvas.pack() canvas.focus_set() canvas.bind('<KeyRelease-Return>', click) canvas.bind('w', lambda e: move(brick, e)) canvas.bind('s', lambda e: move(brick, e)) canvas.bind('a', lambda e: move(brick, e)) canvas.bind('d', lambda e: move(brick, e)) root.mainloop()
Отредактировано m1r42 (Март 14, 2023 12:30:55)
Офлайн
m1r42Спасибо огромное!
Офлайн