Как убрать светло-серую рамку вокруг моего виджета Canvas? - PullRequest
28 голосов
/ 30 ноября 2010

Я возился с виджетом 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()

Ответы [ 2 ]

36 голосов
/ 30 ноября 2010

Раздел 6.8 Почему холст, кажется, не начинается с 0,0? из FAQ по использованию Tk описывает феномен.

Мне удалось устранить артефакт границы с небольшими изменениями в опубликованном источнике ...

Изменить это:

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 .

Выполнение w.config() сразу после того, как оператор инициализации Canvas показал значения по умолчанию: 2 для highlightthickness и 0 для border width.

12 голосов
/ 30 ноября 2010

Короткий ответ: у Canvas есть два компонента, которые влияют на края: граница (атрибут borderwidth) и кольцо выделения (атрибут highlightthickness).

Если ширина границы равна нулю, а толщина подсветки равна нулю, координаты холста начнутся с 0,0. В противном случае эти два компонента холста нарушают пространство координат.

Чаще всего я задаю для этих атрибутов значение ноль . Затем, если я на самом деле хочу рамку, я помещу этот холст в рамку и наложу рамку.

...