在下面这个程序中,我可以左右移动线条,上下移动。但是,是否可以使线条对角移动?例如,当同时按下向上箭头和向右箭头时,程序使对角线移动NE?
from tkinter import *
canvas_height = 400
canvas_width = 600
canvas_colour = "orange"
p1_x = canvas_width / 2
p1_y = canvas_height
p1_colour = "black"
line_width = 10
line_length = 10
def p1_move_N(event):
global p1_y
canvas.create_line(p1_x, p1_y, p1_x, (p1_y - line_length),
width=line_width, fill=p1_colour)
p1_y = p1_y - line_length
def p1_move_S(event):
global p1_y
canvas.create_line(p1_x, p1_y, p1_x, p1_y + line_length,
width=line_width, fill=p1_colour)
p1_y = p1_y + line_length
def p1_move_E(event):
global p1_x
canvas.create_line(p1_x, p1_y, p1_x + line_length, p1_y,
width=line_width, fill=p1_colour)
p1_x = p1_x + line_length
def p1_move_W(event):
global p1_x
canvas.create_line(p1_x, p1_y, p1_x - line_length, p1_y,
width=line_width, fill=p1_colour)
p1_x = p1_x - line_length
def erase_all(event):
canvas.delete(ALL)
window = Tk()
window.title("Drawing Software")
canvas = Canvas(bg=canvas_colour, height=canvas_height,
width=canvas_width, highlightthickness=0)
canvas.pack()
window.bind("<Up>", p1_move_N)
window.bind("<Down>", p1_move_S)
window.bind("<Left>", p1_move_W)
window.bind("<Right>", p1_move_E)
答案 0 :(得分:0)
添加如下函数:
def p1_move_NE(event):
global p1_y,p1_x
canvas.create_line(p1_x, p1_y, p1_x + line_length, (p1_y - line_length),
width=line_width, fill=p1_colour)
p1_x = p1_x + line_length
p1_y = p1_y - line_length
然后将其与:
绑定window.bind("9", p1_move_NE)
我对你的程序的其他建议是使用这样的类和泛型函数:
def p1_move(dx, dy):
global p1
canvas.create_line(p1[0], p1[1], p1[0] + dx, p1[1] + dy,
width=line_width, fill=p1_colour)
p1 = (p1[0] + dx, p1[1] + dy)
(我在我的例子中使用了元组p1,但是Point类仍然会更好。)