Найти - Пользователи
Полная версия: Проблемы с bind() в Tkinter
Начало » Python для новичков » Проблемы с bind() в Tkinter
1
E_off
Привет,я здесь недавно.заранее извиняюсь. Первый раз создаю простенькую-глупую игру в 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()
m1r42
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()

Только в Windows наверное будет Enter вместо KeyRelease-Return. Не помню.
Про новые кубики не очень понял где они, как, собственно, и сути игры.
E_off
m1r42
Спасибо!
А не знаешь как привязать движение к каждому новому кубику?
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()
E_off
m1r42
Спасибо огромное!
Все так как я и хотел<3
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB