2010-11-30 6 views
22

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

ответ

26

Section 6.8 Why doesn't the canvas seem to start at 0,0? из Tk Usage FAQ описывает явление.

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

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

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 инициализации показал по умолчанию быть для highlightthickness и для border width.

+0

Спасибо, что убил двух зайцев одним выстрелом! – rectangletangle 2010-11-30 07:09:07

8

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

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

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