如何在Python中使用Tkinter的几何?

时间:2016-02-08 16:49:00

标签: python tkinter

我一直无法绕着Tkinter的几何形状缠头。我有一系列的问题,希望有人能够为我做好准备。

在下面的代码中制作矩形时,我传入了4个参数。我知道它们是x1,y1,x2,y2参数,但这究竟是如何工作的呢?我似乎无法创建一个特定大小的矩形,并将其准确放置在我想要的位置。另外,20 + 20的东西在第3和第4个参数中的含义是什么?

如何检测特定坐标?我希望能够检测到屏幕上的线条,并在矩形接触时执行代码,但我很无能为力。我也无法将线放在我想要的位置,以强调我得到Tkinter的几何形状。

window = Tk()
window.geometry("400x200+450+300")

canvas1 = Canvas(window, width = 600, height = 300, bg='white')
canvas1.pack()
canvas1.create_line(25, 50, 50, 50)

robot = canvas1.create_rectangle(10, 10, 20+20, 20+20)

x1, y1, x2, y2 = canvas1.coords(robot)

def right(event):
    x1, y1, x2, y2 = canvas1.coords(robot)
    canvas1.coords(robot, x1+10, y1, x2+10, y2)

def left(event):
    x1, y1, x2, y2 = canvas1.coords(robot)
    canvas1.coords(robot, x1-10, y1, x2-10, y2)

def up(event):
    x1, y1, x2, y2 = canvas1.coords(robot)
    canvas1.coords(robot, x1, y1-10, x2, y2-10)


def down(event):
    x1, y1, x2, y2 = canvas1.coords(robot)
    canvas1.coords(robot, x1, y1+10, x2, y2+10)



canvas1.focus_set()
canvas1.bind("<Right>", right)
canvas1.bind("<Left>", left)
canvas1.bind("<Up>", up)
canvas1.bind("<Down>", down)

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

Tkinter画布坐标从画布左上角的0,0开始。随着X变大,该点移动到。随着Y变大,点移动向下

考虑这行代码:

robot = canvas1.create_rectangle(10, 10, 20+20, 20+20)

这将创建一个由坐标(10,10)和(40,40)组成的矩形。从左上角开始,tkinter将计算十个像素,向下十个像素以绘制矩形的第一个角。矩形的对角是(40,22)。它看起来像这样(不按比例):

  point 1 (10,10)
    +


                   +
                 point 2 (40, 40)

Tkinter将通过计算(40,10)和(10,22)处的缺角来创建一个矩形

  point 1 (10,10)
    +--------------+
    |              |
    |              |
    +--------------+
                 point 2 (40,40)

至于第二个问题(实际上应该是一个单独的问题),您可以使用画布find_overlapping方法确定一个对象是否与另一个对象重叠。