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

Posted

技术标签:

【中文标题】如何移除 Canvas 小部件周围的浅灰色边框?【英文标题】:How do I remove the light grey border around my Canvas widget? 【发布时间】:2011-05-17 15:58:22 【问题描述】:

我一直在弄乱 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()

【问题讨论】:

【参考方案1】:

如果在画布类实例中添加 highlightthickness 会引发错误(它最近为我做)。如下图添加到config中:

canvas=Canvas(width=206,height=260, bg=YELLOW)
canvas.config(highlightthickness=0)

【讨论】:

【参考方案2】:

Tk Usage FAQ 中的Section 6.8 Why doesn't the canvas seem to start at 0,0? 描述了这种现象。

我能够通过对发布的源代码进行轻微更改来消除边框伪影...

改变这个:

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

到:

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

还有这个:

x0 = 2
y0 = 2
x1 = 151
y1 = 2

到:

x0 = 0
y0 = 0
x1 = 150
y1 = 0

有趣的是,"borderwidth" 属性没有任何区别,但我将其留在了 FAQ 中。

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

【讨论】:

谢谢,一石二鸟! borderwidth 配置没有任何区别,因为原始代码已经使用bd 选项将边框宽度设置为零,这是borderwidth 的同义词 您所说的“所有指标都推断 Tk Canvas 在一定程度上被破坏”是什么意思?画布是一个很棒的小部件,有什么指标说它很糟糕? @Bryan - 对我来说,borderwidth 选项及其缩写形式对于这种特殊情况都没有影响。单独设置 highlightthickness 选项会删除 2 像素的灰色边框。为了检查,我删除了borderwidth 和highlightthickness 属性并运行了w.config()。 “highlightthickness”默认为 2,而“borderwidth”默认为 0。默认值是否有可能是特定于平台的?无论如何,我编辑了响应以简化。是的,Canvas 是一个很棒的小部件。也删除了第一个声明,以免误导任何人。 是的,默认值不仅可以是特定于平台的,还可以是特定于窗口管理器和特定于用户的。【参考方案3】:

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

如果您的边框宽度为零,高光厚度为零,则画布坐标将从 0,0 开始。否则,画布的这两个组件侵犯了坐标空间。

我最常做的是将这些属性设置为。然后,如果我真的想要一个边框,我会将该画布放在一个框架内并给框架一个边框。

【讨论】:

以上是关于如何移除 Canvas 小部件周围的浅灰色边框?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除画布周围的灰色边框

如何在 gtkmm 中隐藏窗格小部件的边框

有啥方法可以删除活动表单中提交按钮周围的 IE 黑色边框?

如何使用 css 在我的文本周围创建边框 [重复]

如何设置自定义小部件的背景颜色和边框宽度?

如何使用 tkinter Canvas 小部件制作按钮?