hacer create coords como python tkinter tkinter-canvas

python - create - ¿Cómo elimino el borde gris claro alrededor de mi widget Canvas?



tkinter frame (2)

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

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

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

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


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

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

Lo que más a menudo hago es establecer estos atributos en cero . Entonces, si realmente quiero un borde, pondré ese lienzo dentro de un marco y le daré un borde al marco.


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

Pude eliminar el artefacto de la frontera con ligeros 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 la diferencia, pero lo dejé en las preguntas frecuentes .

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