如何删除Canvas小部件周围的浅灰色边框?

rec*_*gle 32 python tkinter tkinter-canvas

我一直在搞乱Tkinter Canvas小部件,看看我是否可以制作一些美观的小部件,我有几个问题.

首先,为什么我的Canvas小部件周围有一个浅灰色边框,我该如何摆脱它呢?

其次,为什么画布中最左边的位置(2,2)?看起来应该是(0,0).

我目前的剧本:

from Tkinter import *

master = Tk()
master.configure(bg='black')
master.wm_attributes("-topmost", 1)

w = Canvas(master, width=150, height=40, bd=0,relief='ridge',)
w.pack()

color = 100
x0 = 2
y0 = 2
x1 = 151
y1 = 2

while y0 < 20 :
    r = color
    g = color
    b = color
    rgb = r, g, b
    Hex = '#%02x%02x%02x' % rgb
    w.create_line(x0, y0, x1, y1,fill=str(Hex), width=1)
    color = color - 2
    y0 = y0 + 1
    y1 = y1 + 1

color = 10

while y0 < 40 :
    r = color
    g = color
    b = color
    rgb = r, g, b
    Hex = '#%02x%02x%02x' % rgb
    w.create_line(x0, y0, x1, y1,fill=str(Hex), width=1)
    color = color + 4
    y0 = y0 + 1
    y1 = y1 + 1

mainloop()
Run Code Online (Sandbox Code Playgroud)

T.P*_*.P. 43

6.8节为什么画布似乎不是从0,0开始?在的Tk的使用FAQ描述的现象.

我已经能够消除边界人工制品,对发布的来源稍作修改......

改变这个:

w = Canvas(master, width=150, height=40, bd=0, relief='ridge')
w.pack()
Run Code Online (Sandbox Code Playgroud)

至:

w = Canvas(master, width=150, height=40, bd=0, highlightthickness=0, relief='ridge')
w.pack()
Run Code Online (Sandbox Code Playgroud)

还有这个:

x0 = 2
y0 = 2
x1 = 151
y1 = 2
Run Code Online (Sandbox Code Playgroud)

至:

x0 = 0
y0 = 0
x1 = 150
y1 = 0
Run Code Online (Sandbox Code Playgroud)

有趣的是,该"borderwidth"属性并没有什么区别,但我根据FAQ留下了它.

w.config()Canvas初始化语句之后立即运行,显示默认值为2 for highlightthickness0 for border width.

  • `borderwidth` 配置没有任何区别,因为原始代码已经使用 `bd` 选项将边框宽度设置为零,这是 `borderwidth` 的同义词 (3认同)
  • “所有指标都表明 Tk Canvas 已达到一定程度”是什么意思?画布是一个很棒的小部件,哪些指标表明它很糟糕? (2认同)

Bry*_*ley 12

简短的回答是,Canvas有两个影响边缘的组件:边框(borderwidth属性)和高亮环(highlightthickness属性).

如果边框宽度为零且高光粗细为零,则画布坐标将从0,0开始.否则,画布的这两个组件会侵犯坐标空间.

我经常做的是将这些属性设置为零.然后,如果我真的想要一个边框,我会把那个画布放在一个框架中并给框架一个边框.