大家好,小编来为大家解答以下问题,python用于绘制弧形的函数,如何用python画一个圆,现在让我们一起来看看吧!
18.2.14 create_arc(*args, **kw)
*args 可以是一个(x1, y1, x2, y2)的矩形元组,也可以是4个坐标参数x1, y1, x2, y2。其他的参数都会产生tcl.Errorpython爱心代码加人名。*args实际上就是传入一个矩形的左上与右下坐标,在定义的矩形范围内,创建一个弧形(ARC)、扇形(PIESLICE)或弓形(CHORD)。新创建的对象位于显示的最前端。创建成功后返回该对象的 ID
(1)*args :定义要创建对象的边界(x1, y1, x2, y2)
(2)**kw: kw选项的具体含义:
选项 | 含义 |
---|---|
activedash | 当鼠标移动到对象边线上面的时候,绘制虚线轮廓线 |
activefill | 当鼠标移动到对象上面的时候,填充的颜色 |
activeoutline | 当鼠标移动到对象上面的时候,绘制轮廓线的颜色 |
activeoutlinestipple | 当鼠标移动到对象上面的时候,指定填充轮廓的位图 注:仅在直线边框上有效,对弧线无效。 |
activestipple | 鼠标位于对象上时,指定填充位图。 注:对含有弧线的图形无效。 |
activewidth | 当鼠标移动到对象上面的时候,指定边框的宽度。 |
dash | 绘制虚线轮廓线。默认是实线轮廓线。 |
disableddash | 当对象状态为 DISABLE 的时候,绘制虚线 |
disabledfill | 当对象状态为 DISABLE 的时候,填充的颜色 |
disabledoutline | 当对象状态为 DISABLE 的时候,绘制轮廓线的颜色 |
disabledoutlinestipple | 当对象状态为 DISABLE 的时候,指定填充轮廓线的位图 注:仅在直线边框上有效,对弧线无效。 |
disabledstipple | 当对象状态为 DISABLE 的时候,指定填充轮廓的位图 注:对含有弧线的图形无效。 |
disabledwidth | 当对象状态为 DISABLE 的时候,指定边框的宽度 |
extent | 指定跨度(从 start 选项指定的位置开始到结束位置的角度)。默认值是 90 |
fill | 指定填充的颜色,空字符串表示透明 |
offset | 指定填充位图的定位方式,如果图形含有弧线边框的图形,此参数无效 |
outline | 指定轮廓线的颜色 |
outlineoffset | 指定当用位图绘制轮廓线时位图的定位方式,该选项的值可以是:“x,y”, “#x,y”, N, NE, E, SE, S, SW, W, NW, CENTER |
outlinestipple | 指定一个位图来绘制边框,默认值是空字符串,表示黑色。弧线部分的边框无法使用位图绘制。 |
start | 指定起始位置的偏移角度 |
state | 指定该对象的状态,可以是 NORMAL,DISABLED(不可用,不响应事件)和 HIDDEN(隐藏)。默认值是 NORMAL |
stipple | 指定一个位图用于填充图形。默认值是空字符串,表示实心。对于含有弧线的图形,无法使用该属性。 |
style | 指定该方法创建的是扇形(PIESLICE)、弓形(CHORD)还是弧形(ARC),默认创建的是扇形 |
tags | 为创建的对象添加标签 |
width | 指定边框的宽度 |
18.2.14.1 activedash | |
鼠标移动到对象的轮廓线上时,绘制虚线。在对象外或者对象内,都不绘制虚线。 |
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,activedash=True,width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
说明:activedash属性与其他的active相关的属性组合的时候,可能鼠标位于对象的内部,也会绘制虚线。
18.2.14.2 activefill
鼠标位于对象内部的时候,填充颜色。鼠标移到对象外面的时候,恢复原状。activefill 与activedash组合的时候,鼠标位于边线后者对象内部,都会绘制虚线。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,activedash=True,
activefill='red',width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
18.2.14.3 activeoutline
鼠标位于对象边线的时候,轮廓线的颜色。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,
activeoutline='yellow',width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
18.2.14.4 activeoutlinestipple
鼠标位于边线上时,轮廓线的底纹位图。不过只对直线的轮廓线有效,弧线不起作用。
内置的底纹位图选项有:
‘gray75’, ‘gray50’, ‘gray25’和’gray12’
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,
activeoutlinestipple='gray25',width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
18.2.14.5 activestipple
鼠标位于对象上时,对象的填充位图。对含有弧线的图形无效,因此此参数对扇形一类的图像无效。
18.2.14.6 activewidth
当鼠标移动到对象上面的时候,指定边框的宽度。这个宽度不是边线的宽度,而是外框的宽度。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,activewidth=10,width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
18.2.14.7 dash
绘制虚线边框。如果不设置此参数,创建图形的时候边框是实线的。dash的参数是一个整数,Boolean,或者一个元组。dash的图案有三种:
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,dash=(1,2),width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,dash=(1,3,5,7),width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,dash=(1,3,5),width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
虚线的绘制,只有以上三种情况。根据需要调整元组里面的参数就可以了。
18.2.14.8 disableddash
和avtivedash的使用方法一样,不过对象的state是tk.DISABLED时绘制虚线轮廓。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,disableddash=True,
state=tk.DISABLED,width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
18.2.14.9 disabledfill
和avtivefill的使用方法一样,不过对象的state是tk.DISABLED时填充指定的颜色。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,disabledfill='red',
state=tk.DISABLED,width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
18.2.14.10 disabledoutline
和avtiveoutline的使用方法一样,不过对象的state是tk.DISABLED时按指定的颜色绘制轮廓线。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,disabledoutline='red',
state=tk.DISABLED,width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
18.2.14.11 disabledoutlinestipple
和avtiveoutlinestipple的使用方法一样,不过对象的state是tk.DISABLED时按指定的填充图案绘制轮廓线。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,state=tk.DISABLED,
disabledoutlinestipple='gray25',width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
18.2.14.12 disabledstipple
和avtivestipple的使用方法一样,不过对象的state是tk.DISABLED时按指定的填充图案绘制对象内部。不过如果对象含有弧线边框的话,此参数无效。因此对应扇形一类的图形,此参数无效。
18.2.14.13 disabledwidth
和avtivewidth的使用方法一样,不过对象的state是tk.DISABLED时按指定边框的宽度。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,state=tk.DISABLED,
disabledwidth=10,width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
18.2.14.14 extent
绘制对象的角度。默认值是90度。也可以选择其他的角度比如220度。如果extent=360,会绘制一个圆形吗?非常遗憾,并不是一个圆,而是一条直线。因为360度与0度是一个意思,在这里相对于张开的角度是0度,因此是一条直线。如果大于360度,则进行360取余运算后再进行绘制。比如extent=380与extent=20是一样的效果。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,extent=220,width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
18.2.14.15 fill
指定填充颜色。默认是使用父窗口的背景色。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,fill='red',width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
那么fill与activefill以及disabledfill哪个优先级要高呢?答案是fill的优先级最低。如果设置了activefill或者disabledfill,那么在满足条件的情况下,会优先使用activefill或者disabledfill设定的颜色。
18.2.14.16 outline
指定轮廓线的颜色。与fill一样,如果同时设定activeoutline或者disabledoutline,那么outline的优先级最低。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,200,200,outline='red',width=5)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
18.2.14.17 outlineoffset
指定当点画模式绘制轮廓时位图的定位方式。可能的取值包括:“x,y”, “#x,y”, N, NE, E, SE, S, SW, W, NW, CENTER。该参数与outlinestipple配合使用。
18.2.14.18 outlinestipple
指定填充边框的位图。只对直线有效,弧线无效。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,60,250,250,outlinestipple='@x.xbm',
outlineoffset='w',width=30)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(20,30,250,250,outlinestipple='@x.xbm',
outlineoffset='e',width=30,extent=180)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
说明:1)位图文件除了内置的图形外,也可以使用自定义的文件。方法是@+文件名。
2)上面的示例中分别使用了’w’和’e’的定位方式,可以看到位图的起始点是不同的。相当于一个左对齐(w)和一个右对齐(e)。
18.2.14.19 start
指定图案的起始角度。默认的情况是从定义的矩形的中心开始,从右向左开始绘制的。也可以指定起始的角度,比如start=45。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,173,200,fill='red',start=45,width=5)
b1.pack()
root.mainloop()
结果:
18.2.14.20 state
指定图案的状态。有三种:
(1)NORMAL。正常状态,可见,可选中,绑定的函数可以调用
(2)DISABLED。禁止状态,可见,但是不可以选中,绑定的回调函数不起作用
(3)HIDDEN。隐藏状态。不可见。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
def hidden():
b1.itemconfigure(arc1,state='hidden')
def show():
b1.itemconfigure(arc1,state='normal')
b2=tk.Button(root,text='Hidden',command=hidden)
b2.pack()
b3=tk.Button(root,text='Show',command=show)
b3.pack()
b1=tk.Canvas(root)
arc1=b1.create_arc(10,10,173,200,fill='red',width=5)
b1.pack()
root.mainloop()
结果:
说明:以上代码实现图像的显示以及隐藏。点击’Hidden’按钮隐藏扇形,点击’Show’则显示图形。
18.2.14.21 stipple
指定图形内部要填充的位图。不过对arc一类含有弧线的图案,stipple参数不起作用。
18.2.14.22 style
指定该方法创建的是扇形(PIESLICE)、弓形(CHORD)还是弧形(ARC)。默认是扇形。
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,173,200,style=tk.PIESLICE,
start=45,width=5)
b1.pack()
root.mainloop()
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,173,200,style=tk.CHORD,
start=45,width=5)
b1.pack()
root.mainloop()
import tkinter as tk
root=tk.Tk()
root.geometry('320x240')
b1=tk.Canvas(root)
b1.create_arc(10,10,173,200,style=tk.ARC,
start=45,width=5)
b1.pack()
root.mainloop()
结果:
18.2.14.23 tags
定义图像的标签,相当于别名。也可以通过其他的方式添加标签。
18.2.14.24 width
指定边框的宽度。在前面的代码中,已经有介绍与使用了。