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

53 投票
3 回答
64278 浏览
提问于 2025-04-16 07:48

我最近在玩Tkinter的Canvas小部件,想看看能不能做出一些好看的小部件,所以有几个问题想问。

首先,我的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()

3 个回答

0

如果在画布类的实例中添加highlightthickness时出现错误(最近我遇到过这种情况),可以像下面这样在配置中添加它:

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

简单来说,Canvas(画布)有两个部分会影响它的边缘:一个是边框(borderwidth 属性),另一个是高亮环(highlightthickness 属性)。

如果你的边框宽度和高亮厚度都设置为零,那么画布的坐标就会从0,0开始。否则,这两个部分会占用一些坐标空间。

我通常会把这两个属性都设置为。然后,如果我真的想要一个边框,我会把这个画布放在一个框架里,并给这个框架加上边框。

94

Tk使用常见问题解答中的第6.8节讲了为什么画布(canvas)看起来不是从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"这个属性并没有什么影响,但我还是按照常见问题解答的建议保留了它。

Canvas初始化后立刻运行w.config(),发现默认值是2(对于highlightthickness)和0(对于border width)。

撰写回答