2010-11-30 18 views
22

He estado jugando con el widget Tkinter Canvas para ver si puedo hacer algunos widgets estéticamente agradables, y tengo algunas preguntas.¿Cómo elimino el borde gris claro alrededor de mi widget Canvas?

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

En segundo lugar, ¿por qué es la posición de la parte superior izquierda en el lienzo (2,2)? Parece que debería ser (0,0).

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

Respuesta

26

Section 6.8 Why doesn't the canvas seem to start at 0,0? del Tk Usage FAQ describe el fenómeno.

yo era capaz de eliminar el artefacto frontera con ligeros cambios en la fuente publicado ...

cambiar esta situación:

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 por la FAQ.

Correr w.config() inmediatamente después de la declaración Canvas inicialización mostró los valores predeterminados para ser para highlightthickness y para border width.

+0

¡Gracias, que mataron a dos pájaros de un tiro! – rectangletangle

+0

La configuración 'borderwidth' no hizo la diferencia porque el código original ya estaba configurando el ancho del borde a cero con la opción' bd', que es un sinónimo de 'borderwidth' –

+1

¿a qué te refieres con" Todos los indicadores infieren que Tk Canvas está corrompido hasta cierto punto "? El lienzo es un fabuloso artilugio, ¿qué indicadores dicen que está borked? –

8

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

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.

Cuestiones relacionadas