TKinter Canvas“破折号”选项的行为不符合预期

Bli*_*ter 6 python tkinter python-3.x tkinter-canvas

canvas.create_line(50, 500, 950, 500, dash=(5, 1), tags="splitDistance")
Run Code Online (Sandbox Code Playgroud)

这将创建一条如下所示的行:

XXXXX XXXXX XXXXX XXXXX
Run Code Online (Sandbox Code Playgroud)

5 个破折号,1 个空格,然后重复,如本文档所述

但当将1更改为任意值时,间隙大小不会改变

dash=(5, 100)

XXXXX XXXXX XXXXX XXXXX
Run Code Online (Sandbox Code Playgroud)

另一个奇怪的行为是,第一个参数仅在可被 5 整除时才会更改结果,例如:(5, 10, 15, 20...)

dash=(1, 1)

X X X X X X X X X X X X
Run Code Online (Sandbox Code Playgroud)

dash=(4, 1)

X X X X X X X X X X X X
Run Code Online (Sandbox Code Playgroud)

dash=(5, 1)

XXXXX XXXXX XXXXX XXXXX
Run Code Online (Sandbox Code Playgroud)

这是程序和结果的图像:

程序图像和结果

Bry*_*ley 7

不同的平台支持不同的破折号模式。您所看到的事实是 Windows 不支持与基于 X 的系统相同的破折号模式。

\n\n

这些示例来自有关该属性的规范 tcl/tk 文档dash(采用 tcl 语法,但到 tkinter 的转换很简单):

\n\n
-dash .     \xe2\x86\x92 -dash {2 4}\n-dash -     \xe2\x86\x92 -dash {6 4}\n-dash -.    \xe2\x86\x92 -dash {6 4 2 4}\n-dash -..   \xe2\x86\x92 -dash {6 4 2 4 2 4}\n-dash {. }  \xe2\x86\x92 -dash {2 8}\n-dash ,     \xe2\x86\x92 -dash {4 4}\n
Run Code Online (Sandbox Code Playgroud)\n\n

该文档继续说道:

\n\n
\n

在仅支持有限一组破折号图案的系统上,破折号图案将显示为可用的最接近的破折号图案。例如,在 Windows 上,仅上述示例中的前 4 个可用。最后 2 个示例的显示方式与第一个示例相同。

\n
\n