Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I remove the light grey border around my Canvas widget?

I've been messing with the Tkinter Canvas widget in order to see if I could make some aesthetically pleasing widgets, and I have a few questions.

First, why is there a light grey border around my Canvas widget, and how do I get rid of it?

Secondly, why is the top left most position in the Canvas (2,2)? It seems like it should be (0,0).

My current script:

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() 
like image 702
rectangletangle Avatar asked Nov 30 '10 04:11

rectangletangle


People also ask

How do you remove a border on canvas?

Observe the Canvas widget has a border. If you set the attribute "highlightthickness=0" in Canvas, then it will no longer display the border around it. Similarly, we have two buttons, one with a border and the second with no border. To remove the border in the button widget, we have used the parameter "borderwidth=0".

How do I change the border on a widget?

There is no way to change the border color of a widget, the border color is tied to the background color of the widget. Instead, you can turn off the border, and then use a frame widget where you can set the background color of the frame.


2 Answers

Section 6.8 Why doesn't the canvas seem to start at 0,0? of the Tk Usage FAQ describes the phenomenon.

I was able to eliminate the border artefact with slight changes to the posted source...

Change this:

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

to:

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

and this:

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

to:

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

Interestingly enough, the "borderwidth" attribute did not make a difference, but I left it in per the FAQ.

Running w.config() immediately after the Canvas initialization statement showed the defaults to be 2 for highlightthickness and 0 for border width.

like image 65
T.P. Avatar answered Oct 05 '22 13:10

T.P.


The short answer is, the Canvas has two components which affect the edges: the border (borderwidth attribute) and highlight ring (highlightthickness attribute).

If you have a border width of zero and a highlight thickness of zero, the canvas coordinates will begin at 0,0. Otherwise, these two components of the canvas infringe upon the coordinate space.

What I most often do is set these attributes to zero. Then, if I actually want a border I'll put that canvas inside a frame and give the frame a border.

like image 33
Bryan Oakley Avatar answered Oct 05 '22 14:10

Bryan Oakley