在 python tkinter canvas 中移动对象
Move object in python tkinter canvas
所以我有一艘潜艇:
from tkinter import *
HEIGHT = 500
WIDTH = 800
window = Tk()
window.title("Bubble Blaster")
c = Canvas(window, width=WIDTH, height=HEIGHT, bg="darkblue")
c.pack()
ship_id = c.create_polygon(5, 5, 5, 25, 30, 15, fill="red")
ship_id2 = c.create_oval(0, 0, 30, 30, outline="red")
我正在看一本关于如何让潜艇移动的书,书上是这样写的:
def move_ship(event):
if event.keysym == "up":
c.move(ship_id, 0, -ship_spd)
c.move(ship_id2, 0, -ship_spd)
elif event.keysym == "Down":
c.move(ship_id, 0, ship_spd)
c.move(ship_id2, 0, ship_spd)
elif event.keysym == "Left":
c.move(ship_id, -ship_spd, 0)
c.move(ship_id2, -ship_spd, 0)
elif event.keysym == "Right":
c.move(ship_id, ship_spd, 0)
c.move(ship_id2, ship_spd, 0)
c.bind_all('<key', move_ship)
当我 运行 它时,它给我一个错误:
PS。我在片段中这样做是因为 Ctrl+v 不会完成所有消息
<h4 style="color: red">Traceback (most recent call last):
File "C:\Users\Bloxy Craft\Desktop\Bubble Blaster.py", line 28, in <module>
c.bind_all('<key>', move_ship)
File "C:\Users\Bloxy Craft\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1257, in bind_all
return self._bind(('bind', 'all'), sequence, func, add, 0)
File "C:\Users\Bloxy Craft\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1200, in _bind
self.tk.call(what + (sequence, cmd))
_tkinter.TclError: bad event type or keysym "key"</h4>
有人可以帮助我吗?
谢谢!
- Bloxy 工艺品
就像 Bryan Oakley 说的,您需要将 '<key'
替换为 '<Key>'
。您还需要在代码中将 if event.keysym == "up":
替换为 if event.keysym == "Up":
('Up' 中的 U 必须大写)。孔码为:
from tkinter import *
HEIGHT = 500
WIDTH = 800
window = Tk()
window.title("Bubble Blaster")
c = Canvas(window, width=WIDTH, height=HEIGHT, bg="darkblue")
c.pack()
ship_id = c.create_polygon(5, 5, 5, 25, 30, 15, fill="red")
ship_id2 = c.create_oval(0, 0, 30, 30, outline="red")
def move_ship(event):
if event.keysym == "Up":
c.move(ship_id, 0, -ship_spd)
c.move(ship_id2, 0, -ship_spd)
elif event.keysym == "Down":
c.move(ship_id, 0, ship_spd)
c.move(ship_id2, 0, ship_spd)
elif event.keysym == "Left":
c.move(ship_id, -ship_spd, 0)
c.move(ship_id2, -ship_spd, 0)
elif event.keysym == "Right":
c.move(ship_id, ship_spd, 0)
c.move(ship_id2, ship_spd, 0)
c.bind_all('<Key>', move_ship)
所以我有一艘潜艇:
from tkinter import *
HEIGHT = 500
WIDTH = 800
window = Tk()
window.title("Bubble Blaster")
c = Canvas(window, width=WIDTH, height=HEIGHT, bg="darkblue")
c.pack()
ship_id = c.create_polygon(5, 5, 5, 25, 30, 15, fill="red")
ship_id2 = c.create_oval(0, 0, 30, 30, outline="red")
我正在看一本关于如何让潜艇移动的书,书上是这样写的:
def move_ship(event):
if event.keysym == "up":
c.move(ship_id, 0, -ship_spd)
c.move(ship_id2, 0, -ship_spd)
elif event.keysym == "Down":
c.move(ship_id, 0, ship_spd)
c.move(ship_id2, 0, ship_spd)
elif event.keysym == "Left":
c.move(ship_id, -ship_spd, 0)
c.move(ship_id2, -ship_spd, 0)
elif event.keysym == "Right":
c.move(ship_id, ship_spd, 0)
c.move(ship_id2, ship_spd, 0)
c.bind_all('<key', move_ship)
当我 运行 它时,它给我一个错误:
PS。我在片段中这样做是因为 Ctrl+v 不会完成所有消息
<h4 style="color: red">Traceback (most recent call last):
File "C:\Users\Bloxy Craft\Desktop\Bubble Blaster.py", line 28, in <module>
c.bind_all('<key>', move_ship)
File "C:\Users\Bloxy Craft\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1257, in bind_all
return self._bind(('bind', 'all'), sequence, func, add, 0)
File "C:\Users\Bloxy Craft\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1200, in _bind
self.tk.call(what + (sequence, cmd))
_tkinter.TclError: bad event type or keysym "key"</h4>
谢谢!
- Bloxy 工艺品
就像 Bryan Oakley 说的,您需要将 '<key'
替换为 '<Key>'
。您还需要在代码中将 if event.keysym == "up":
替换为 if event.keysym == "Up":
('Up' 中的 U 必须大写)。孔码为:
from tkinter import *
HEIGHT = 500
WIDTH = 800
window = Tk()
window.title("Bubble Blaster")
c = Canvas(window, width=WIDTH, height=HEIGHT, bg="darkblue")
c.pack()
ship_id = c.create_polygon(5, 5, 5, 25, 30, 15, fill="red")
ship_id2 = c.create_oval(0, 0, 30, 30, outline="red")
def move_ship(event):
if event.keysym == "Up":
c.move(ship_id, 0, -ship_spd)
c.move(ship_id2, 0, -ship_spd)
elif event.keysym == "Down":
c.move(ship_id, 0, ship_spd)
c.move(ship_id2, 0, ship_spd)
elif event.keysym == "Left":
c.move(ship_id, -ship_spd, 0)
c.move(ship_id2, -ship_spd, 0)
elif event.keysym == "Right":
c.move(ship_id, ship_spd, 0)
c.move(ship_id2, ship_spd, 0)
c.bind_all('<Key>', move_ship)