是否有可能使线条在tkinter中对角移动?

时间:2015-06-02 16:19:16

标签: python python-3.x tkinter tkinter-canvas

在下面这个程序中,我可以左右移动线条,上下移动。但是,是否可以使线条对角移动?例如,当同时按下向上箭头和向右箭头时,程序使对角线移动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)

1 个答案:

答案 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类仍然会更好。)