【问题标题】:Does canvas.bind work in a while loopcanvas.bind 是否在 while 循环中工作
【发布时间】:2016-04-23 19:05:39
【问题描述】:

我有一个使用 Tkinter 的 Python 3.4.4 程序,它应该在屏幕上移动一个正方形。

不幸的是,canvas.bind 在 while 循环内似乎不起作用,但它必须在 while 循环内,否则方块不会移动。这是因为我在每次循环运行时在技术上绘制一个具有不同 x、y、x1 和 y1 坐标的新正方形,并且绑定是使正方形根据箭头键在每个方向上移动的原因。

代码如下:

from tkinter import *
import time, random
tk = Tk()
canvas = Canvas(tk, width = 1000, height = 1000)
canvas.pack()

def move(event):
    if event.keysym == 'Up':
        y-=10
        y1-=10
    elif event.keysym == 'Down':
        y+=10
        y1+=10
    elif event.keysym == 'Right':
        x+=10
        x1+=10
    elif event.keysym == 'Left':
        x+=10
        x1+=10


background = canvas.create_rectangle(0, 0, 1000, 1000, fill = 'orange') #draws background
ranNum=random.random()*960  #Creates a random number
ranNum1=random.random()*960 #Creates a random number
food = canvas.create_rectangle(ranNum, ranNum1, ranNum + 15, ranNum1 + 15, fill='green') #creates food
r1 = None
o = 0
length = 4
x = 500
y = 500
x1 = 515
y1 = 515
while o < length:          
    if canvas.find_overlapping(ranNum, ranNum, ranNum + 15, ranNum1 + 15) == True:
        x+=5
        y+=5
        x1+=5
        y1+=5
        canvas.delete(food)
    r=canvas.create_rectangle(x, y, x1, y1, fill = 'blue')
    canvas.bind('<KeyPress-Up>', move )
    canvas.bind('<KeyPress-Down>', move)
    canvas.bind('<KeyPress-Left>', move)
    canvas.bind('<KeyPress-Right>', move)
    time.sleep(.0)
    canvas.delete(r1)
    tk.update()
    r1 = r

【问题讨论】:

  • 不需要在每一步都更新画布元素或 Tk()。为什么要将事件绑定到画布?绑定到 main_Tk(mean window),如果鼠标悬停在画布上,则监听每个键。
  • 所以删除 tk.update 而不是 canvas.bind 使用 main_tk.bind?
  • 是的,也许你稍后会删除画布或画布元素!
  • main_Tk 只是提出了一个语法错误,说 NameError: name 'main_tk' is not defined
  • 对不起! main_tktk 而你的 tk.mainloop() 行在哪里?

标签: python tkinter key-bindings tkinter-canvas


【解决方案1】:

不要更改 x 或 y,每次更改都需要 canvas itemconfigure

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多