Tkinter Canvas
Canvas极简例子
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'black' )
cv. pack( )
root. mainloop( )
创建item
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
cv. create_rectangle( 10 , 10 , 110 , 110 )
cv. pack( )
root. mainloop( )
指定item的填充色
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
cv. create_rectangle( 10 , 10 , 110 , 110 , fill= 'red' )
cv. pack( )
root. mainloop( )
指定item的边框颜色
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
cv. create_rectangle( 10 , 10 , 110 , 110 , outline= 'blue' )
cv. pack( )
root. mainloop( )
指定item的边框宽度
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
cv. create_rectangle( 10 , 10 , 110 , 110 , outline= 'blue' , width= 5 )
cv. pack( )
root. mainloop( )
画虚线
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
cv. create_rectangle( 10 , 10 , 110 , 110 ,
outline= 'blue' ,
width= 5 ,
fill= 'green' ,
dash= 10 )
cv. pack( )
root. mainloop( )
画刷填充
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
cv. create_rectangle( 10 , 10 , 110 , 110 ,
outline= 'blue' ,
width= 5 ,
fill= 'green' ,
dash= 10 ,
stipple= 'gray12' )
cv. pack( )
root. mainloop( )
修改item的坐标
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
rt = cv. create_rectangle( 10 , 10 , 110 , 110 ,
outline= 'blue' ,
width= 5 ,
fill= 'green' ,
dash= 10 ,
stipple= 'gray12' )
cv. pack( )
cv. coords( rt, ( 40 , 40 , 80 , 80 ) )
root. mainloop( )
创建item的tags
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
rt = cv. create_rectangle( 10 , 10 , 110 , 110 ,
outline= 'blue' ,
width= 5 ,
fill= 'green' ,
dash= 10 ,
stipple= 'gray12' ,
tags= 'rl' )
cv. pack( )
print ( cv. gettags( rt) )
cv. itemconfig( rt, tags= ( 'r2' , 'r3' , 'r4' ) )
print ( cv. gettags( rt) )
root. mainloop( )
多个item同用一个tag
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
rt = cv. create_rectangle( 10 , 10 , 110 , 110 ,
outline= 'blue' ,
width= 5 ,
fill= 'green' ,
dash= 10 ,
stipple= 'gray12' ,
tags= ( 'r1' , 'r2' , 'r3' ) )
cv. pack( )
cv. create_rectangle( 20 , 20 , 80 , 80 , tags= 'r3' )
print ( cv. find_withtag( 'r3' ) )
root. mainloop( )
通过tag访问item
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
rt = cv. create_rectangle( 10 , 10 , 110 , 110 ,
outline= 'blue' ,
width= 5 ,
fill= 'green' ,
dash= 10 ,
stipple= 'gray12' ,
tags= ( 'r1' , 'r2' , 'r3' ) )
cv. pack( )
cv. create_rectangle( 20 , 20 , 80 , 80 , tags= 'r3' )
for item in cv. find_withtag( 'r3' ) :
cv. itemconfig( item, outline= 'red' )
root. mainloop( )
向其他item添加tag
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
rt1 = cv. create_rectangle( 10 , 10 , 110 , 110 ,
tags= ( 'r1' , 'r2' , 'r3' ) )
rt2 = cv. create_rectangle( 20 , 20 , 80 , 80 ,
tags= ( 's1' , 's2' , 's3' ) )
rt3 = cv. create_rectangle( 30 , 30 , 70 , 70 ,
tags= ( 'y1' , 'y2' , 'y3' ) )
cv. addtag_above( 'r4' , rt2)
cv. addtag_below( 'r5' , rt2)
for item in [ rt1, rt2, rt3] :
print ( cv. gettags( item) )
root. mainloop( )
返回其他item
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
rt1 = cv. create_rectangle( 10 , 10 , 110 , 110 ,
tags= ( 'r1' , 'r2' , 'r3' ) )
rt2 = cv. create_rectangle( 20 , 20 , 80 , 80 ,
tags= ( 's1' , 's2' , 's3' ) )
rt3 = cv. create_rectangle( 30 , 30 , 70 , 70 ,
tags= ( 'y1' , 'y2' , 'y3' ) )
cv. itemconfig( cv. find_above( rt2) , outline= 'purple' )
cv. itemconfig( cv. find_below( rt2) , outline= 'orange' )
cv. pack( )
root. mainloop( )
改变item的顺序
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
rt1 = cv. create_rectangle( 10 , 10 , 110 , 110 ,
tags= ( 'r1' , 'r2' , 'r3' ) )
rt2 = cv. create_rectangle( 20 , 20 , 80 , 80 ,
tags= ( 's1' , 's2' , 's3' ) )
rt3 = cv. create_rectangle( 30 , 30 , 70 , 70 ,
tags= ( 'y1' , 'y2' , 'y3' ) )
cv. tag_lower( rt1)
cv. tag_raise( rt3)
cv. itemconfig( cv. find_above( rt2) , outline= 'red' )
cv. itemconfig( cv. find_below( rt2) , outline= 'green' )
cv. pack( )
root. mainloop( )
移动item
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
rt1 = cv. create_rectangle( 10 , 10 , 110 , 110 ,
tags= ( 'r1' , 'r2' , 'r3' ) ,
outline= 'green' )
cv. create_rectangle( 10 , 10 , 110 , 110 ,
tags= ( 'r1' , 'r2' , 'r3' ) )
cv. move( rt1, 20 , - 10 )
cv. pack( )
root. mainloop( )
删除item
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
rt1 = cv. create_rectangle( 10 , 10 , 110 , 110 ,
tags= ( 'r1' , 'r2' , 'r3' ) ,
outline= 'green' )
rt2 = cv. create_rectangle( 20 , 20 , 100 , 100 ,
tags= ( 's1' , 's2' , 's3' ) )
cv. delete( rt1)
cv. delete( 's1' )
cv. pack( )
root. mainloop( )
缩放item
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
rt1 = cv. create_rectangle( 10 , 10 , 110 , 110 ,
tags= ( 'r1' , 'r2' , 'r3' ) ,
outline= 'green' )
cv. scale( rt1, 0 , 0 , 1 , 2 )
cv. pack( )
root. mainloop( )
绑定item与event
from tkinter import *
def printrect ( event) :
print ( 'rectangle' )
root = Tk( )
cv = Canvas( root, bg= 'grey' )
rt1 = cv. create_rectangle( 10 , 10 , 110 , 110 ,
tags= ( 'r1' , 'r2' , 'r3' ) ,
outline= 'green' ,
width= 8 ,
fill= 'blue' )
cv. tag_bind( 'r1' , '<Button-1>' , printrect)
cv. pack( )
root. mainloop( )
添加绑定事件
from tkinter import *
def printrect ( event) :
print ( 'rectangle' )
def printline ( event) :
print ( 'line' )
root = Tk( )
cv = Canvas( root, bg= 'grey' )
rt1 = cv. create_rectangle( 10 , 10 , 110 , 110 ,
tags= ( 'r1' , 'r2' , 'r3' ) ,
outline= 'green' ,
width= 8 )
cv. tag_bind( 'r1' , '<Button-1>' , printrect)
cv. tag_bind( 'r1' , '<Button-3>' , printline)
cv. pack( )
root. mainloop( )
绘制扇形
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'grey' )
cv. create_arc( ( 10 , 10 , 110 , 110 ) )
cv. pack( )
root. mainloop( )
扇形,弓形,弧形
from tkinter import *
root = Tk( )
d = { 1 : PIESLICE, 2 : CHORD, 3 : ARC}
cv = Canvas( root, bg= 'grey' )
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( )
设置角度
from tkinter import *
root = Tk( )
d = { 1 : PIESLICE, 2 : CHORD, 3 : ARC}
cv = Canvas( root, bg= 'grey' )
for i in d:
cv. create_arc( ( 10 , 10 + 60 * i, 110 , 110 + 60 * i) ,
style= d[ i] ,
start= 30 ,
extent= 30 )
print ( i, d[ i] )
cv. pack( )
root. mainloop( )
绘制位图
from tkinter import *
root = Tk( )
d = { 1 : 'error' , 2 : 'info' , 3 : 'question' , 4 : 'hourglass' }
cv = Canvas( root, bg= 'grey' )
for i in d:
cv. create_bitmap( ( 20 * i, 20 * i) , bitmap= d[ i] )
cv. pack( )
root. mainloop( )
绘制gif图
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'white' )
img = PhotoImage( file = 'c:\\python.gif' )
cv. create_image( ( 150 , 150 ) , image= img)
cv. pack( )
root. mainloop( )
绘制直线
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'white' )
d = [ ( 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( )
joinstyle属性
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'white' )
d = [ ( 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( )
绘制椭圆
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'white' )
cv. create_oval( ( 10 , 10 , 210 , 110 ) , fill= 'red' )
cv. pack( )
root. mainloop( )
绘制多边形
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'white' )
cv. create_polygon( ( 10 , 10 , 10 , 200 , 100 , 200 , 23 , 23 ) , fill= 'green' )
cv. pack( )
root. mainloop( )
绘制文本
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'white' )
cv. create_text( ( 100 , 10 ) , text= 'hello text' ,
anchor= W)
cv. pack( )
root. mainloop( )
选中文本
from tkinter import *
root = Tk( )
cv = Canvas( root, bg= 'white' )
txt = cv. create_text( ( 100 , 10 ) , text= 'hello text' , anchor= W)
cv. select_from( txt, 2 )
cv. select_to( txt, 5 )
cv. pack( )
root. mainloop( )
创建组件
from tkinter import *
def printwindow ( ) :
print ( 'window' )
root = Tk( )
cv = Canvas( root, bg= 'white' )
bt = Button( cv,
text= 'click' ,
command= printwindow)
cv. create_window( ( 100 , 100 ) ,
window= bt,
anchor= S)
cv. create_line( 80 , 80 , 200 , 200 )
cv. pack( )
root. mainloop( )