¿Cómo elimino el borde gris claro de mi widget de Canvas?

He estado jugando con el widget Tkinter Canvas para ver si podía hacer algunos widgets estéticamente agradables, y tengo algunas preguntas.

Primero, ¿por qué hay un borde gris claro alrededor de mi widget de Canvas, y cómo me deshago de él?

En segundo lugar, ¿por qué la posición más a la izquierda superior en el Lienzo (2,2)? Parece que debería ser (0,0).

Mi guión actual:

 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() 

Sección 6.8 ¿Por qué no parece que el canvas comienza en 0,0? de las preguntas frecuentes de uso de Tk describe el fenómeno.

Pude eliminar el artefacto de la frontera con pequeños cambios en la fuente publicada …

Cambia esto:

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

a:

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

y esto:

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

a:

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

Curiosamente, el atributo "borderwidth" no hizo una diferencia, pero lo dejé en la "borderwidth" Preguntas frecuentes .

La ejecución de w.config() inmediatamente después de la statement de inicialización del Canvas mostró que los valores predeterminados son 2 para el border width highlightthickness y 0 para el border width .

La respuesta corta es que el canvas tiene dos componentes que afectan los bordes: el borde (atributo de borderwidth borde) y el anillo de highlightthickness (atributo de borderwidth highlightthickness ).

Si tiene un ancho de borde de cero y un grosor de resaltado de cero, las coordenadas del canvas comenzarán en 0,0. De lo contrario, estos dos componentes del canvas infringen el espacio de coordenadas.

Lo que más a menudo hago es poner estos atributos a cero . Luego, si realmente quiero un borde, pondré ese canvas dentro de un marco y le daré un borde.