我一直无法绕着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)
感谢您的帮助。
答案 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方法确定一个对象是否与另一个对象重叠。