Tkinter教程之Canvas篇(4)

''' Tkinter教程之Canvas篇(4) '''
''' 22.绘制弧形 '''
#  -*- coding: cp936 -*-
#
 创建一个ARC
from  Tkinter  import   *
root 
=  Tk()
#  创建一个Canvas,设置其背景色为白色
cv  =  Canvas(root,bg  =   ' white ' )
cv.create_arc((
10 , 10 , 110 , 110 ),)
cv.pack()
root.mainloop()
#  使用默认参数创建一个ARC,结果为90度的扇形
''' 23.设置弧形的样式 '''
#  -*- coding: cp936 -*-
#
 创建create_arc.
from  Tkinter  import   *
root 
=  Tk()
#  创建一个Canvas,设置其背景色为白色
cv  =  Canvas(root,bg  =   ' white ' )
=  { 1 :PIESLICE, 2 :CHORD, 3 :ARC}
for  i  in  d:
    cv.create_arc((
10 , 10   +   60 * i, 110 , 110   +   60 * i),style  =  d[i])
    
print  i,d[i],
cv.pack()
root.mainloop()
#  使用三种样式,分别创建了扇形、弓形和弧形
''' 24.设置弧形的角度 '''
#  -*- coding: cp936 -*-
#
 使用start/extent指定起始角度与偏移角度
from  Tkinter  import   *
root 
=  Tk()
#  创建一个Canvas,设置其背景色为白色
cv  =  Canvas(root,bg  =   ' white ' )
=  { 1 :PIESLICE, 2 :CHORD, 3 :ARC}
for  i  in  d:
    cv.create_arc(
        (
10 , 10   +   60 * i, 110 , 110   +   60 * i),
        style 
=  d[i],    # 指定样式
        start  =   30 ,      # 指定起始角度
        extent  =   30       # 指定角度偏移量
        )
cv.pack()
root.mainloop()
#  使用三种样式,start指定起始角度;extent指定角度偏移
''' 25.绘制位图 '''
#  -*- coding: cp936 -*-
#
 使用bitmap创建位图create_bitmap
from  Tkinter  import   *
root 
=  Tk()
#  创建一个Canvas,设置其背景色为白色
cv  =  Canvas(root,bg  =   ' white ' )
=  { 1 : ' error ' , 2 : ' info ' , 3 : ' question ' , 4 : ' hourglass ' }
for  i  in  d:
    cv.create_bitmap((
20 * i, 20 * i),bitmap  =  d[i])
cv.pack()
root.mainloop()
#  使用bitmap属性来指定位图的名称,这个函数的第一个参数为一个点(x,y)指定位图存放位置的左上位置。
''' 26.绘制GIF图像 '''
#  -*- coding: cp936 -*-
#
 创建gif图像create_image
from  Tkinter  import   *
root 
=  Tk()
#  创建一个Canvas,设置其背景色为白色
cv  =  Canvas(root,bg  =   ' white ' )
img 
=  PhotoImage(file  =   ' c:/python.gif ' )
cv.create_image((
150 , 150 ),image  =  img)
cv.pack()
root.mainloop()
#  先使用PhotoImage创建GIF图像,再将image属性来设置为新创建的img
''' 27.绘制直线 '''
#  -*- coding: cp936 -*-
#
 创建带箭头的直线create_line
from  Tkinter  import   *
root 
=  Tk()
#  创建一个Canvas,设置其背景色为白色
cv  =  Canvas(root,bg  =   ' white ' )
=  [(0, ' none ' ),( 1 , ' first ' ),( 2 , ' last ' ),( 3 , ' both ' )]
for  i  in  d:
    cv.create_line(
        (
10 , 10   +  i[0] * 20 , 110 , 110 +  i[0]  *   20 ),    #  设置直线的起始、终点
        arrow  =  i[ 1 ],                            #  设置直线是否使用箭头
        arrowshape  =   ' 40 40 10 '                   #  设置箭头的形状(填充长度,箭头长度,箭头宽度
        )
cv.pack()
root.mainloop()
#  使用arrow属性来控制是否显示箭头
''' 28.直线的joinstyle属性 '''
#  -*- coding: cp936 -*-
#
 创建直线,使用joinstyle属性
from  Tkinter  import   *
root 
=  Tk()
#  创建一个Canvas,设置其背景色为白色
cv  =  Canvas(root,bg  =   ' white ' )
=  [(0, ' none ' , ' bevel ' ),( 1 , ' first ' , ' miter ' ),( 2 , ' last ' , ' round ' ),( 3 , ' both ' , ' round ' )]
for  i  in  d:
    cv.create_line(
        (
10 , 10   +  i[0] * 20 , 110 , 110 +  i[0]  *   20 ),    #  设置直线的起始、终点
        arrow  =  i[ 1 ],                            #  设置直线是否使用箭头
        arrowshape  =   ' 8 10 3 ' ,                   #  设置箭头的形状(填充长度,箭头长度,箭头宽度
        joinstyle  =  i[ 2 ],
        )
cv.pack()
root.mainloop()
#  将直线的属性joinstyle分别设置为bevel/miter/round,测试其效果。
''' 29.绘制椭圆 '''
#  -*- coding: cp936 -*-
#
 绘制椭圆,使用create_oval属性
from  Tkinter  import   *
root 
=  Tk()
#  创建一个Canvas,设置其背景色为白色
cv  =  Canvas(root,bg  =   ' white ' )
#  创建一个长200,宽100的椭圆
cv.create_oval(( 10 , 10 , 210 , 110 ),fill  =   ' red ' )
cv.pack()
root.mainloop()
#  指定椭圆的长和宽,圆是长和宽相等的特殊情况。
''' 30.创建多边形 '''
#  -*- coding: cp936 -*-
#
 创建多边形(三角形)
from  Tkinter  import   *
root 
=  Tk()
#  绘制一个Canvas,设置其背景色为白色
cv  =  Canvas(root,bg  =   ' white ' )
#  创建一个直角三角形
cv.create_polygon(( 10 , 10 , 10 , 200 , 100 , 200 ),fill  =   ' red ' )
cv.pack()
root.mainloop()
#  指定三个点的坐标,三个点坐标必须满足三角形的定义。
''' 31.修饰图形 '''
#  -*- coding: cp936 -*-
#
 创建多边形create_ploygon(三角形)
from  Tkinter  import   *
root 
=  Tk()
#  创建一个Canvas,设置其背景色为白色
cv  =  Canvas(root,bg  =   ' white ' )
#  创建一个直角三角形
cv.create_polygon(( 10 , 10 , 10 , 200 , 100 , 200 ),
                  
# smooth = True,   # 平滑处理,但未找到控制此参数的项
                  splinesteps  =  0,   #  不明白是控制什么的???
                  )
cv.pack()
root.mainloop()
#  smooth/splinesteps用来修改绘制的图形,不明白这两个参数还有其它什么作用。
''' 32.绘制文字 '''
#  -*- coding: cp936 -*-
#
 使用文字create_text
from  Tkinter  import   *
root 
=  Tk()
#  创建一个Canvas,设置其背景色为白色
cv  =  Canvas(root,bg  =   ' white ' )
#  创建一个文字对象,默认设置为居中对齐
cv.create_text(( 10 , 10 ),text  =   ' Hello Text ' ,
               anchor 
=  W
               )
cv.pack()
root.mainloop()
#  使用anchor控制文字的位置,使用justify控制对齐方式
''' 33.选中文字 '''
#  -*- coding: cp936 -*-
#
 使用文字create_text
from  Tkinter  import   *
root 
=  Tk()
#  创建一个Canvas,设置其背景色为白色
cv  =  Canvas(root,bg  =   ' white ' )
#  创建一个文字对象,默认设置为居中对齐
txt  =  cv.create_text(( 10 , 10 ),text  =   ' Hello Text ' ,
               anchor 
=  W
               )
#  设置文本的选中起始位置
cv.select_from(txt, 2 )
#  设置文本的选中结束位置
cv.select_to(txt, 5 )

cv.pack()
root.mainloop()
#  使用anchor控制文字的位置,使用justify控制对齐方式
''' 34.创建组件 '''
#  -*- coding: cp936 -*-
#
 使用子组件create_window
from  Tkinter  import   *
root 
=  Tk()
#  创建一个Canvas,设置其背景色为白色
cv  =  Canvas(root,bg  =   ' white ' )
#  创建一个Button对象,默认设置为居中对齐
def  printWindow():
    
print   ' window '
bt 
=  Button(cv,text  =   ' ClickMe ' ,command  =  printWindow)
# 修改button在canvas上的对齐方式
cv.create_window(( 10 , 10 ),window  =  bt,anchor  =  W)
#  新创建的line对象与button有重叠
cv.create_line( 10 , 10 , 20 , 20 )
#  新创建的line不在button之上,即没有重叠
cv.create_line( 30 , 30 , 100 , 100 )
cv.pack()
root.mainloop()
#  使用anchor组件在Canvas上的位置,默认情况下为居中对齐,这样使用后其它的item将不能再使用button战胜的那块区域
 

你可能感兴趣的:(Python,UI)