我已經通過綁定一鍵我的畫布綁定按鍵事件:在畫布組件
self.canvas.bind("<w>", lambda event: self.canvas.focus_set())
現在,我該怎麼辦,所以當按下此鍵,它會調用特定的動作,如將對象向上移動到畫布上?
我已經通過綁定一鍵我的畫布綁定按鍵事件:在畫布組件
self.canvas.bind("<w>", lambda event: self.canvas.focus_set())
現在,我該怎麼辦,所以當按下此鍵,它會調用特定的動作,如將對象向上移動到畫布上?
你可以做到這一點我指定新座標每當你點擊例如字母W
。
Here您可以找到canvas對象支持的方法。有一個叫coords
,它允許你通過它的ID
指定一個對象的座標。該ID是當你創建一個對象,例如,當您創建一個oval
返回值,:
oval_id = canvas.create_oval(x1, y1, x2, y2)
ID都是唯一的,所以你可以用它們來移動特別是一個對象。 你可以用例如bind_all
某個字母的點擊(例如w
)和一個方法來移動我們的橢圓。下面是一個完整的工作示例(我討厭使用global
,但在這種情況下,我使用它爲簡單起見):
try:
import tkinter as tk # using Python 3
except ImportError:
import Tkinter as tk # using Python 2
def move(event=None):
global x1, x2, y1, y2, oval
if event.char == 'w':
y1 -= 10
y2 -= 10
oval = (x1, y1, x2, y2)
canvas.coords(oval_id, oval)
m = tk.Tk()
canvas = tk.Canvas(m)
canvas.pack(expand=1, fill='both')
x1, x2 = 50, 100
y1, y2 = 50, 100
oval = (x1, y1, x2, y2)
oval_id = canvas.create_oval(oval)
canvas.bind_all('<w>', move)
m.mainloop()
根據您需要以下文件:
例子:
# Sample event handler
def handle_up_key(self, event):
self.canvas.focus_set()
# Do whatever else you want.
def __init__(self):
self.canvas.bind("<Key-Up>", self.handle_up_key)
self.canvas.bind("<KeyPress-Up>", ...)
self.canvas.bind("<KeyRelease-Up>", ...)
# And so for any key you want to map.
更多信息:
您可能想要提到的是,畫布還需要有鍵盤焦點才能讓它首先被賦予事件。 – 2015-02-05 17:04:50
這個問題不值得一降投票,除了由所做的一點努力OP自己找到一個答案,但我完全理解,因爲tkinter的文檔,字面上,在我看來,很爛。 – nbro 2015-02-05 15:23:38
@Rinzler:我不同意。 downvote按鈕有一個字面上以「這個問題沒有顯示任何研究工作」開頭的工具提示。對我而言,那意味着沒有研究成果的問題應該被降低。這個問題提出了無數教程和問題中記載的內容。此外,問題還不清楚:他們是在問如何調用函數,還是在問如何移動對象? – 2015-02-05 17:03:25
@BryanOakley我理解你的觀點,但我不是一個機器人,我可以試着理解你在問什麼。他是這個網站的新手,我很確定他下一次他會改善他的問題。如果記錄這些事情,有時很難找到它們,實際上,大多數情況下,如果你是初學者。沒有官方更新的文檔。只有一半產生了不夠的支持。在我看來,Tkinter文檔很糟糕。 – nbro 2015-02-05 20:06:09