<p>当然可以。在</p>
<p>像这样:</p>
<pre><code># -*- coding: utf-8 -*-
from Tkinter import *
from random import randint
root = Tk()
can = Canvas(root,width=400.5,height=400,bg="#CCCCCC",highlightbackground="#006699")
can.place(x=10,y=10)
"""
Sec = SECTOR
|Sec-1 Sec-2 |
| |
| |
| |
| |
|Sec-4 Sec-3 |
"""
deviation = 2 #NEED SHOW ALL ARCs IN CANVAS(FULL)
size = 5 #MEAN WIDTH(BORDER THICKNES)
def setARC(radius,sector,deviation,size):
w,h = can.config("width")[-1],can.config("height")[-1]
startAngle = 0
position = list()
if sector == 1 :
positions = 0+deviation,radius+size+deviation,radius+size+deviation,0+deviation
startAngle = 90
elif sector == 2 :
positions = int(w)-radius-size-deviation,deviation,int(w)-deviation,radius+deviation+size
elif sector == 3:
positions = int(w)-radius-size-deviation,int(h)-deviation,int(w)-deviation,int(h)-radius-deviation-size
startAngle = 270
elif sector == 4:
positions = deviation,int(h)-radius-deviation-size,radius+deviation+size,int(h)-deviation
startAngle = 180
can.create_arc(positions,start=startAngle,extent=90,outline="black",width=size,style=ARC,tags="Sector-"+str(sector))
sizer.set(radius)
def change(e):
w,h = int(can.config("width")[-1]),int(can.config("height")[-1])
radius = sizer.get()
for x in can.find_all():
wrd = can.gettags(x)[0]
if wrd.startswith("Sector-") :
position = list()
if wrd[-1] == "1":
position = [0+deviation,radius+size+deviation,radius+size+deviation,0+deviation]
elif wrd[-1] == "2":
position = [w-radius-size-deviation,deviation,w-deviation,radius+deviation+size]
elif wrd[-1] == "3":
position = [w-radius-size-deviation,h-deviation,w-deviation,h-radius-deviation-size]
elif wrd[-1] == "4":
position = [deviation,h-radius-deviation-size,radius+deviation+size,h-deviation]
can.coords(x, tuple(position))
Rcolor = (min(w,h)*255)/(radius if radius > 0 else 1)
outColor = "#%02X%02X%02X"%tuple(randint(0,255) for i in range(3))
can.itemconfig(x,outline=outColor)
sizer = Scale(root, from_=0, to=min(can.config("width")[-1],can.config("height")[-1]), orient=VERTICAL,command=change)
sizer.place(x=10+int(can.place_info()["x"])+int(can.config("width")[-1]),y=int(can.place_info()["y"]),\
height=min(int(can.config("width")[-1]),int(can.config("height")[-1])))
sizer.set(200)
for i in range(1,5,1):
setARC(200,i,2,5)
root.geometry("800x450+50+50")
root.config(bg="#006699")
root.mainloop()
</code></pre>
<p>考虑的重点是确定项目的方面大小。在</p>
<p><code>w,h = int(can.config("width")[-1]),int(can.config("height")[-1])</code></p>
<p>您还必须向canvas元素添加标记。在</p>
<p><code>can.create_arc(positions,start=startAngle,extent=90,outline="black",width=size,style=ARC,tags="Sector-"+str(sector))</code></p>