python - 如何正确使用 tkinter create_line() 坐标

标签 python tkinter coordinates line lines

本教程使用 Canvas 的大小作为线条的坐标: http://effbot.org/tkinterbook/canvas.htm

但是,如果我们编辑代码以使 Canvas 没有填充,我们会发现这无法正常工作。如果仔细观察,第二个 create_line() 没有与角正确对齐:

from tkinter import *

master = Tk()

w = Canvas(master, width=200, height=100,bd=0,highlightthickness=0)
w.configure(bg="black")
w.pack()

w.create_line(0, 0, 200, 100, fill="red")
w.create_line(0, 100, 200, 0, fill="red")
master.mainloop()

另一个使用 3x3 Canvas 的示例:

from tkinter import *

root = Tk()
root.configure(bg="blue")
canvas = Canvas(root, width=3, height=3, borderwidth=0, highlightthickness=0, bg="black")
canvas.pack()

canvas.create_line(0,0,3,3, fill="red")
canvas.create_line(0,3,3,0, fill="red")

root.mainloop()

这个问题似乎只影响从左下角到右上角,或从右上角到左下角的线条。

如果我们将第二个 create_line() 的坐标更改为 -1 和 3,它现在可以正常工作:

from tkinter import *

root = Tk()
root.configure(bg="blue")
canvas = Canvas(root, width=3, height=3, borderwidth=0, highlightthickness=0, bg="black")
canvas.pack()

canvas.create_line(0,0,3,3, fill="red")
canvas.create_line(-1,3,3,-1, fill="red")

root.mainloop()

我的问题是:为什么这只影响第二个create_line()?如果3没有变成2,为什么坐标0会变成-1?这是它应该工作的方式,还是 tkinter 只是在正确绘制正斜率方面存在固有问题?在我看来,情况应该是后者。如果我想制作一个根据给定的一组坐标绘制多条线的程序,我似乎必须在创建它之前计算每个给定的线段是正斜率还是负斜率。

因此,我不得不将正在制作的程序完全搁置几天。有人可以对这个问题提供任何见解吗?有什么我遗漏或不理解的地方吗?

最佳答案

你在第二行犯了错误

  • Python 从 0 开始计数,因此左下角是 (0,2),而不是 (0,3)。所以你必须从点 (0,2)

  • 开始第二行
  • 第一行有点 (0,0)、(1,1)、(2,2)(3,3) 位于外部 Canvas 。类似的第二行应该有 (0,2), (1,1), (2,0)(3,-1) (位于 Canvas 之外)。但是您不能跳过 (3,3)(3,-1) 因为 create_line 不会绘制最后一个点 - 最后一个点不属于行(类似于x不属于range(x))。如果您跳过 (3,3)(3,-1),则 create_line 不会绘制 (2,2) (2,0)

正确的行

canvas.create_line(0,0,3,3, fill="red")
canvas.create_line(0,2,3,-1, fill="red")

换句话说

  • 第一行(a,b,a+3,b+3)给出(0,0,0+3,0+3) = (0,0,3,3)
  • 第二行(a,b,a-3,b-3)给出(0,2,0-3,2-3) = (0,2,3,-1)

关于python - 如何正确使用 tkinter create_line() 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40390746/

相关文章:

iphone - 不使用 map 布局 GPS 坐标

java - 从旧坐标和 x 和 y 计算新坐标

python - 如果是分号,则匹配除最后一个字符之外的所有字符

python - 如何在不编写类的情况下访问 Tkinter 中按钮的父级?

python - Lambda 输出层

python - 'weight' 在 tkinter 中有什么作用?

python - 带有百分比标签的进度条?

excel - 计算Excel工作表中两地之间的地理坐标距离

python - 使用子进程运行带有标志的可执行文件

python - 值列表彼此之间的余弦相似度