[英]Move item across canvas in tkinter python
我在 canvas 上有兩條垂直線,中間有一個間隙(每次隨機生成)。 這條線從 canvas 的右側開始。 當我單擊“l”鍵時,它會運行 function 將行向左移動 5,您可以繼續單擊“l”直到它到達左側。 我想知道如何設置它,所以我只需要按一次“l”鍵,線條就會慢慢地在屏幕上移動,直到它到達左側。 任何幫助,將不勝感激
import random
import time
from tkinter import *
window = Tk()
window.geometry("300x300")
window.title("GUI")
window.resizable(FALSE, FALSE)
label1 = Label(window, text="My First GUI", font=("arial", 16, "bold"))
label1.pack()
canvas = Canvas()
canvas.config(bg="gray")
canvas.place(width=300, height=150, x=0, y=150)
def key_pressed(event):
if event.char == "l":
move_line()
def create_gap():
gap_ycoords = []
# random number between 10 and 95 in increments of 5
first_line_end = random.randrange(10, 96, 5)
gap_ycoords.append(first_line_end)
second_line_start = first_line_end + 50
gap_ycoords.append(second_line_start)
return gap_ycoords
def draw_line_obstacle(canvas_ref):
y_coord = create_gap()
top_line = canvas_ref.create_line(295, 5, 295, y_coord[0], tags="top_line")
bottom_line = canvas_ref.create_line(295, y_coord[1], 295, 145, tags="bottom_line")
draw_line_obstacle(canvas)
def move_line():
if canvas.coords("top_line")[0] > 5:
tcoords = canvas.coords("top_line")
bcoords = canvas.coords("bottom_line")
canvas.coords("top_line", tcoords[0] - 5, tcoords[1], tcoords[2] - 5, tcoords[3])
canvas.coords("bottom_line", bcoords[0] - 5, bcoords[1], bcoords[2] - 5, bcoords[3])
window.bind("<Key>", key_pressed)
window.mainloop()
你這么近! 在move_line
function 中只需要多行:
def move_line():
if canvas.coords("top_line")[0] > 5:
... # other code
canvas.after(100, move_line) # delay in ms, lower=faster movement
您需要使用.after()
。 這基本上每隔 20 毫秒調用一次 function。
反復調用此 function 將使您按一次“l”鍵時,該行將移動到屏幕的另一端。
代碼:
import random
import time
from tkinter import *
window = Tk()
window.geometry("300x300")
window.title("GUI")
window.resizable(FALSE, FALSE)
label1 = Label(window, text="My First GUI", font=("arial", 16, "bold"))
label1.pack()
canvas = Canvas()
canvas.config(bg="gray")
canvas.place(width=300, height=150, x=0, y=150)
def key_pressed(event = None):
move_line()
window.after(20, key_pressed)
def create_gap():
gap_ycoords = []
# random number between 10 and 95 in increments of 5
first_line_end = random.randrange(10, 96, 5)
gap_ycoords.append(first_line_end)
second_line_start = first_line_end + 50
gap_ycoords.append(second_line_start)
return gap_ycoords
def draw_line_obstacle(canvas_ref):
y_coord = create_gap()
top_line = canvas_ref.create_line(295, 5, 295, y_coord[0], tags="top_line")
bottom_line = canvas_ref.create_line(295, y_coord[1], 295, 145, tags="bottom_line")
draw_line_obstacle(canvas)
def move_line():
if canvas.coords("top_line")[0] > 5:
tcoords = canvas.coords("top_line")
bcoords = canvas.coords("bottom_line")
canvas.coords("top_line", tcoords[0] - 5, tcoords[1], tcoords[2] - 5, tcoords[3])
canvas.coords("bottom_line", bcoords[0] - 5, bcoords[1], bcoords[2] - 5, bcoords[3])
window.bind("<l>", key_pressed)
window.mainloop()
在這一行: window.after(20, key_pressed)
,您可以將數字 20 更改為更高的值以更慢地移動,而更低的值以更快地移動。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.