0
私は、Python 3.4.4でTkinterを使っているプログラムを持っています。whileループでcanvas.bindは動作しますか
残念ながら、whileループ内ではcanvas.bind
は動作していないようですが、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
すべての変更のもののためにキャンバスitemconfigureを必要とし、xまたはyを変更しないでください。イベントをキャンバスにバインドする理由main_Tk(平均ウィンドウ)にバインドし、マウスカーソルがキャンバス上にある場合、各キーを聞きます。 – dsgdfg
したがって、canvas.bindの代わりにmain_tk.bindを使用してtk.updateを削除しますか? – Maximus
はい、後でキャンバスやキャンバスの要素を削除することがあります。 – dsgdfg