【发布时间】:2019-12-10 06:33:26
【问题描述】:
我在 Tkinter 画布上绘制了漂亮的多边形。我想把它作为 Tkinter 按钮的图标。
我在this 中看到了如何在画布上放置一个按钮,但这会覆盖多边形。当然,如果我将多边形放在按钮上,按钮就无法访问。
我试图避免使用外部图像。我想保持代码自包含,而不是依赖于图像的路径。如果我们移动代码,事情将会中断。
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()
这只会在多边形上放置一个按钮。我想把多边形放在按钮里面。
【问题讨论】:
-
您可以尝试
Pillow模块的ImageDraw在图像中绘制多边形,然后在按钮中使用此图像。
标签: python tkinter tkinter-canvas