Tkinter Canvas 绘制线条

Tkinter Canvas 绘制线条

tkinter模块内的Canvas,这个模块可以绘图,也可以制作动画。

可以使用Canvas( )方法建立画布对象。

tk = Tk()                                 # 使用tk当窗口Tk对象
canvas = Canvas(tk, width=xx, height=yy)  # xx, yy 是画布宽和高
canvas.pack()                             # 可以将画布pack好,这是必要的

画布建立完成后,左上角是坐标(0,0),向右x轴递增,向下y轴递增。

绘制线条create_line()的使用方式如下。

create_line(x1, y1, x2, y2, ... xn, yn, options)

线条将会沿着(x1,y1),(x2,y2), …绘制下去,下列是常用的options用法。

(1)arrow:默认是没有箭头,使用arrow=tk.FIRST在起始线末端有箭头,arrow=LAST在最后一条线末端有箭头,使用arrow=tk.BOTH在两端有箭头。

(2)arrowshape:使用元组(d1, d2, d3)代表箭头,默认是(8,10,3)。

Tkinter Canvas 绘制线条

(3)capstyle:这是线条终点的样式,默认是BUTT,也可以选择PROJECTING、ROUND。

(4)dash:建立虚线,使用元组储存数字数据,第一个数字是实线,第二个数字是空白,如此循环当所有元组数字用完又重新开始。例如,dash=(5,3)产生5像素实线,3像素空白,如此循环。再如,dash=(8,1,1,1)产生8像素实线和点的线条,dash=(5,)产生5像素实线5像素空白。

(5)dashoffset:与dash一样产生虚线,但是一开始数字是空白的宽度。

(6)fill:设置线条颜色。

(7)joinstyle:线条相交的设置,默认是ROUND,也可以选择BEVEL、MITER。

(8)stipple:绘制位图(Bitmap)线条。

(9)width:线条宽度。

示例1

在半径为100的圆外围建立12个点,然后将这些点彼此连接。

from tkinter import *
import math

tk = Tk()
canvas = Canvas(tk, width=640, height=480)
canvas.pack()
x_center, y_center, r = 320, 240, 100
x, y = [], []
for i in range(12):    # 建立圆外围12个点
    x.append(x_center + r * math.cos(30*i*math.pi/180))   # x = x0 + r * cos(A)
    y.append(y_center + r * math.sin(30*i*math.pi/180))   # y = y0 + r * sin(A)
for i in range(12):    # 将12个点彼此连线
    for j in range(12):
        canvas.create_line(x[i],y[i],x[j],y[j])

tk.mainloop()

输出:

Tkinter Canvas 绘制线条

上述程序使用了数学函数sin( )和cos( )以及pi,这些是在math模块。使用create_line( )时,在options参数字段可以用fill设置线条颜色,用width设置线条宽度。

示例2

不同线条颜色与宽度。

from tkinter import *
import math

tk = Tk()
tk.title("apidemos.com") 
canvas = Canvas(tk, width=640, height=480)
canvas.pack()
canvas.create_line(100,100,500,100)
canvas.create_line(100,125,500,125,width=5)
canvas.create_line(100,150,500,150,width=10,fill='blue')
canvas.create_line(100,175,500,175,dash=(10,2,2,2))    

tk.mainloop()

输出:

Tkinter Canvas 绘制线条

示例3

由线条交接了解joinstyle参数的应用。

from tkinter import *
import math

tk = Tk()
tk.title("apidemos.com") 
canvas = Canvas(tk, width=640, height=480)
canvas.pack()
canvas.create_line(30,30,500,30,265,100,30,30,
                    width=20,joinstyle=ROUND)
canvas.create_line(30,130,500,130,265,200,30,130,
                    width=20,joinstyle=BEVEL)
canvas.create_line(30,230,500,230,265,300,30,230,
                    width=20,joinstyle=MITER)
tk.mainloop()

输出:

Tkinter Canvas 绘制线条

示例4

由线条了解capstyle参数的应用。

from tkinter import *
import math

tk = Tk()
tk.title("apidemos.com") 
canvas = Canvas(tk, width=640, height=480)
canvas.pack()
canvas.create_line(30,30,500,30,width=10,capstyle=BUTT)

canvas.create_line(30,130,500,130,width=10,capstyle=ROUND)

canvas.create_line(30,230,500,230,width=10,capstyle=PROJECTING)
# 以下是垂直线
canvas.create_line(40,20,40,240)
canvas.create_line(500,20,500,250)

tk.mainloop()

输出:

Tkinter Canvas 绘制线条

示例5

建立位图线条。

from tkinter import *
import math

tk = Tk()
tk.title("apidemos.com") 
canvas = Canvas(tk, width=640, height=480)
canvas.pack()

canvas.create_line(30,30,500,30,width=50,stipple="gray25")
canvas.create_line(30,130,500,130,width=50,stipple="questhead")
canvas.create_line(30,230,500,230,width=50,stipple="info")
tk.mainloop()

输出:

Tkinter Canvas 绘制线条

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程