I have nice polygon I drew in a Tkinter canvas. I would like put that as the icon of a Tkinter button.
I see in this how to put a button on a canvas, but that covers up the polygon. And of course, if I put the polygon over the button, the button is not accessible.
I am trying to avoid using an external image. I'd like to keep the code self-contained and not be dependent on the path to an image. Things will be break if we ever move the code.
from Tkinter import *
class Example(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.widget()
def Xshape (self,canvas,x,y,p,t,outline='black',fill='green',width=1):
points = []
s = t - p
for i in (1,-1):
points.extend(( x, y + (i*p) ))
points.extend(( x + (i*s), y + (i*t) ))
points.extend(( x + (i*t), y + (i*s) ))
points.extend(( x + (i*p), y))
points.extend(( x + (i*t), y - (i*s) ))
points.extend(( x + (i*s), y - (i*t) ))
canvas.create_polygon(points,outline=outline,
fill=fill,width=width)
def widget(self):
cWidth=64.
cHeight=64.
self.canv = Canvas(frame,width=cWidth,height=cHeight)
self.Xshape(self.canv, (cWidth+2)/2,(cHeight+2)/2, cHeight/5,cHeight/2)
self.toggle = Button(frame,relief=FLAT,text='test')
self.win = self.canv.create_window(cWidth/2,cHeight/2,anchor=CENTER,window=self.toggle)
self.canv.grid(row=0,column=2)
root = Tk()
root.geometry('100x100+10+50')
root.wm_title("Telescope Health Status")
root.grid_rowconfigure( 1, weight=1)
root.grid_columnconfigure( 0, weight=1)
frame = Frame(root,bg='light blue',padx=30)
frame.grid(row=0, column=0, columnspan=20, sticky='ew')
app = Example(root)
app.mainloop()
This only puts a button over the polygon. I want to put the polygon inside the button.