Python 的Tkinter包系列之三:Canvas(画布)

这篇具有很好参考价值的文章主要介绍了Python 的Tkinter包系列之三:Canvas(画布)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python 的Tkinter包系列之三:Canvas(画布)

Tkinter 的Canvas(画布)控件具有两个功能,首先它可以用来绘制各种图形(图片),比如直线、弧形、椭圆形、多边形和矩形等,也可以在上面放置图片(graphics)、文本、小部件(widgets)或框架( frames)。

8. The Canvas widget (tkdocs.com)

绘制在画布控件上的图形,称之为“画布对象”。每一个画布对象都有一个“唯一身份ID”,这是 Tkinter 自动为其创建的,从而方便控制和操作这些画布对象。

画布坐标系:以画布的左上角作为坐标原点,右下角的坐标为距离x轴和Y轴的两个最大值。

Python 的Tkinter包系列之三:Canvas(画布)

要创建画布对象的构造函数【注:构造函数(constructor),是一种特殊的方法。主要用来在创建对象时初始化对象】语法:

tk.Canvas(parent, option=value, ...)

返回画布控件(widget:控件、组件、部件)。其中:

parent  -- 控件,表示将菜单将建立在哪一个父对象上。

**options -- 选项,下方详细列举了各个选项的具体含义和用法:

Option(选项)   描述

Bd   表示该边界的宽度,默认的宽度是 2,单位像素。

bg     它代表了画布的背景颜色。

confine  它被设置为使画布unscrollable以外的滚动区域。

cursor   在画布上设置光标为箭头、圆、点等。

height   它代表了画布在垂直方向上的大小。

Highlightcolor  设置当获得焦点时突出显示的颜色。

relief    表示边框的类型,可能的值包括SUNKEN、RAISED、GROOVE 、RIDGE。

scrollregion  表示为包含画布区域的坐标的元组。

width  设置画布的宽度,单位为像素。

xscrollincrement  如果它被设置为正值,画布只放置到该值的倍数。

xscrollcommand  如果画布是可滚动的,那么这个属性应该是水平滚动条的.set()方法。

yscrollincrement  像xscrollincrement一样工作,但是控制垂直移动。

yscrollcommand  如果画布是可滚动的,这个属性应该是垂直滚动条的.set()方法。

创建画布源码:

from tkinter import *
# 创建窗口
win= Tk()
win.title("创建画布")
win.geometry("600x400")
# 创建Canvas
cv= Canvas(win,width=400,height=300,bg="white")
# 设置画布放置布局
cv.pack()

程序运行效果:

Python 的Tkinter包系列之三:Canvas(画布)

Canvas 还提供了如下方法来绘制各种图形。

create_line():绘制直线,语法格式:

create_line(x0, y0, x1, y1, ..., xn, yn, option, ...)

这条线穿过一系列点(x0,y0),(x1,y1),…(xn,yn)。Option(选项)包括:

下列是常用的options用法。

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

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

Python 的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:线条宽度。

使用create_line()方法的示例源码:

from tkinter import *
# 创建窗口
win= Tk()
win.title("创建画布")
win.geometry("600x400")
# 创建Canvas
cv= Canvas(win,width=400,height=300,bg="white")
# 设置画布放置布局
cv.pack()
# 绘制直线
line1 = cv.create_line(14,65,66,65,fill="red")
# 绘制折线
line2 = cv.create_line(20,70,50,80,60,150,fill="green")
# 显示主窗口
win.mainloop()

程序运行效果:

Python 的Tkinter包系列之三:Canvas(画布)

create_arc方法绘制弧,语法格式:

create_arc(x0, y0, x1, y1, option, ...)

点(x0,y0)是椭圆所在矩形的左上角,(x1,y1)是右下角。如果这个矩形是正方形,你会得到一个圆。

下列是常用的options用法。

(1)dash:建立虚线,与create_line( )相同。

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

(3)extent:如果要绘制圆形extent值是359,如果写成360会视为0°。如果extent介于1~359,则是绘制这个角度的圆弧。

(4)fill:填充圆弧颜色。

(5)outline:设置圆弧线条颜色。

(6)start:圆弧起点位置。

(7)stipple:绘制位图圆弧。

(8)style:有三种格式——ARC表示绘制圆弧、CHORD表示绘制弦、PIESLICE表示绘制扇形。

(9)width:圆弧线条宽度。

使用create_arc方法的示例源码:

from tkinter import *
# 创建窗口
win= Tk()
win.title("创建画布")
win.geometry("600x400")
# 创建Canvas
cv= Canvas(win,width=400,height=300,bg="white")
# 设置画布放置布局
cv.pack()
# 绘制圆弧
arc1 = cv.create_arc(20, 10, 110, 110, extent=90, style=ARC)
# 绘制弦
arc2 = cv.create_arc(210, 10, 310, 110, extent=180, style=CHORD)
# 绘制扇形
arc3 = cv.create_arc(50,50,160,160, extent=60, style=PIESLICE)
# 绘制圆
arc3 = cv.create_arc(100,100,260,260,extent=359, style=ARC)
# 显示主窗口
win.mainloop()

程序运行效果:

Python 的Tkinter包系列之三:Canvas(画布)

create_image方法在Canvas对象内插入图像文件,语法格式:

create_image(x, y, option, ...)

(x,y)是图像左上角的位置,常用的options(选项):

(1)anchor:位图是相对于点(x,y)定位的。默认值为anchor= CENTER,表示位图位于(x,y)位置的中心。锚定(anchor)常数如下图所示:

Python 的Tkinter包系列之三:Canvas(画布)

(2)image参数 image 定义图片的来源,必须是 tkinter 模块的 BitmapImage 类或 PhotoImage 类的实例变量。

下面使用create_ image方法的例子

Python 的Tkinter包系列之三:Canvas(画布)

请准备一张图片,名为TestUse.png,为方便将其和下面的示例源码文件放到同一文件夹中。

使用create_ image方法的示例源码:

from tkinter import *
# 创建窗口
win= Tk()
win.title("创建画布")
win.geometry("600x400")
# 创建Canvas
cv= Canvas(win,width=400,height=300,bg="white")
# 设置画布放置布局
cv.pack()
#加载图片显示
img = PhotoImage(file="TestUse.png")
C_I =cv.create_image(200,150,anchor=CENTER,image= img)
# 显示主窗口
win.mainloop()

程序运行效果:

Python 的Tkinter包系列之三:Canvas(画布)

create_bitmap方法在Canvas对象内插入位图文件,语法格式:

create_bitmap (x, y, option, ...)

(x,y)是图像左上角的位置,常用的options(选项):

(1)anchor:默认是anchor=CENTER。 

(2) bitmap 参数定义的标准位图如下:

Python 的Tkinter包系列之三:Canvas(画布)

从左到右是'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question', 和 'warning'. 或 question。可以直接使用 XBM(X Bitmap)格式的文件,在 XBM 文件名称前添加一个 @ 符号,如 bitmap=@hello.xbm。

【在线免费转换您的png文件为xbm文件XBM转换器 — Convertio】

下面使用create_ ibitmap方法的例子

请准备一张图片,名为TestUse. xbm,为方便将其和下面的示例源码文件放到同一文件夹中。

使用create_ ibitmap方法的示例源码:

from tkinter import *
# 创建窗口
win= Tk()
win.title("创建画布")
win.geometry("600x400")
# 创建Canvas
cv= Canvas(win,width=400,height=300,bg="white")
# 设置画布放置布局
cv.pack()
#加载图片显示
C_B =cv.create_bitmap(40, 40,anchor=CENTER,bitmap="warning") #显示warning标准位图
C_B2 =cv.create_bitmap(140, 140,anchor=CENTER,bitmap="@TestUse.xbm")#显示TestUse.xbm

# 显示主窗口
win.mainloop()

程序运行效果:

Python 的Tkinter包系列之三:Canvas(画布)

create_oval方法绘制椭圆,语法格式:

create_oval(x0, y0, x1, y1, option, ...)

椭圆,包括特殊情况下的圆。所占用的矩形区域由左上角的坐标(x0,y0)和右下角外的点的坐标(x1,y1)定义。option(选项)在此就不多说了。

使用create_oval方法的示例源码

from tkinter import *
# 创建窗口
win= Tk()
win.title("创建画布")
win.geometry("600x400")
# 创建Canvas
cv= Canvas(win,width=400,height=300,bg="white")
# 设置画布放置布局
cv.pack()
#绘制椭圆,填满颜色是绿色,外围颜色是红色。
C_O =cv.create_oval(80,20,320,180,fill="green",outline="red")            
# 显示主窗口
win.mainloop()

程序运行效果:

Python 的Tkinter包系列之三:Canvas(画布)

create_rectangle() 方法绘制矩形,语法格式:

create_rectangle(x0, y0, x1, y1, option, ...)

为矩形指定为两点:(x0,y0)是左上角,(x1,y1)是像素在右下角外面的位置。

下面给出绘制矩形示例源码:

from tkinter import *
# 创建窗口
win= Tk()
win.title("创建画布")
win.geometry("600x400")
# 创建Canvas
cv= Canvas(win,width=400,height=300,bg="white")
# 设置画布放置布局
cv.pack()
#绘制矩形
C_O =cv.create_rectangle(30,40,280,210)       
# 显示主窗口
win.mainloop()

程序运行效果:

Python 的Tkinter包系列之三:Canvas(画布)

create_polygon方法绘制多边形,语法格式:

create_polygon(x0, y0, x1, y1, ..., option, ...)

由一系列顶点(x0,y0),(x1,y1),…(xn,yn)决定多边形轮廓。

下面给出绘制多边形示例源码:

from tkinter import *
# 创建窗口
win= Tk()
win.title("创建画布")
win.geometry("600x400")
# 创建Canvas
cv= Canvas(win,width=400,height=300,bg="white")
# 设置画布放置布局
cv.pack()
#绘制三角形
C_P =cv.create_polygon(10,10,70,80,60,30)
C_P2 =cv.create_polygon(110,20,170,90,160,50,fill="white",outline="black")
#绘制六边形
C_P2 =cv.create_polygon(290,114,316,114,330,130,310,146,284,146,270,130)
# 显示主窗口
win.mainloop()

程序运行效果:

Python 的Tkinter包系列之三:Canvas(画布)

create_text方法输出文字,语法格式:

create_text(x, y, option, ...)

(x,y)是文字字符串输出的中心坐标,常用的options(选项):

(1)anchor:默认是anchor=CENTER。

(2)fill:文字颜色。

(3)font:字形的使用。

(4)justify:当输出多行时,默认是靠左LEFT。

(5)stipple:绘制位图线条的文字,默认是“”表示实线。

(6)text:输出的文字。

下面给出输出文字示例源码:

from tkinter import *
# 创建窗口
win= Tk()
win.title("创建画布")
win.geometry("600x400")
# 创建Canvas
cv= Canvas(win,width=400,height=300,bg="white")
# 设置画布放置布局
cv.pack()
#输出文字
myStr = "welcome 欢迎"
C_T1 = cv.create_text(200, 30, text=myStr)
C_T2 = cv.create_text(200, 50, text=myStr, fill='blue')
C_T3 = cv.create_text(200, 90, text=myStr, fill='red',
                    font=('隶书',20))
# 显示主窗口
win.mainloop()

程序运行效果:

Python 的Tkinter包系列之三:Canvas(画布)

create_window方法绘制窗口,语法格式:

create_window(x, y, option, ...)

在指定位置(x, y)创建一个窗口控件,窗口是一个矩形区域,可以使用画布窗口(canvas window)对象将任何Tkinter的 widget(组件、小部件、控件)放置到画布上。常用的options(选项):

(1)anchor  窗口相对于点(x,y)定位的。默认值为anchor= CENTER,表示窗口位于(x,y)位置的中心。锚定(anchor)常数可见前面。

(2)height 为窗口保留的区域的高度。如果省略,窗口大小将适合所包含小部件的高度。

(3)width 为窗口保留的区域的宽度。如果省略,窗口大小将适合所包含小部件的宽度。

(4)window  使用window=w,其中w是要放置在画布上的widget(组件、小部件、控件)。

使用create_window方法示例源码:

from tkinter import *
# 创建窗口
win= Tk()
win.title("创建画布")
win.geometry("600x400")
# 定义移动函数
def move_img():
    # 定义移动坐标
    cv.move(image1,50,30)
# 创建Canvas
cv= Canvas(win,width=400,height=300,bg="white")
# 设置画布放置布局
cv.pack()
# 使用 PhotoImage()来加载图片
img = PhotoImage (file="TestUse.png")
image1=cv.create_image(30,150,image = img,anchor =W)
# 将按钮放置在画布中
btn=Button(cv,text="点击移动画布",bg="#8A8A8A",activebackground="#7CCD7C",command=move_img)
# 在指定位置创建一个窗口控件,tags来添加标签
cv.create_window(340,260,height=30,width=80,window=btn)
# 显示主窗口
win.mainloop()

程序运行效果:

Python 的Tkinter包系列之三:Canvas(画布)

你可点击上图中的按钮试试。文章来源地址https://www.toymoban.com/news/detail-493999.html

到了这里,关于Python 的Tkinter包系列之三:Canvas(画布)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • canvas实现鼠标滚轮滚动缩放画布

    canvas实现鼠标滚轮滚动缩放画布效果

    2024年02月04日
    浏览(45)
  • 关于HTML5画布canvas的功能

    一、画布的使用 1、首先创建一个画布(canvas) canvas id=”myCanvas” width=”200” height=”100” style=”border:1px solid #000000”/canvas 2、使用JavaScript来绘制图像 script Var c=document.getElementByID(“myCanvas”)//得到画布 Var ctx=c.getContext(“2d”);//得到画笔 Cxt.fillStyle=”#FF0000”;//填充颜色 Cxt

    2024年02月06日
    浏览(47)
  • 微信小程序canvas画布不清晰解决方法

    绘制的图片,文字等十分模糊 添加以下代码,通过设置分辨率来解决 完整代码: 模糊不清的时候 多多进行调试一下就可以了 多尝试新方案 

    2024年02月10日
    浏览(58)
  • 微信小程序--canvas画布实现图片的编辑

    上传图片,编辑图片大小,添加文字,改变文字颜色等 微信小程序--canvas画布实现图片的编辑 软件环境:微信开发者工具 官方下载地址:微信开发者工具下载地址与更新日志 | 微信开放文档 1、基本需求。 实现上传图片 实现图片编辑 实现添加文字 实现导出图片 2、案例目录

    2024年02月05日
    浏览(48)
  • Canvas鼠标滚轮缩放以及画布拖动(图文并茂版)

    本文会带大家认识Canvas中常用的坐标变换方法 translate 和 scale,并结合这两个方法,实现鼠标滚轮缩放以及画布拖动功能。 Canvas 绘图的缩放以及画布拖动主要通过 CanvasRenderingContext2D 提供的 translate 和 scale 两个方法实现的,先来认识下这两个方法。 translate 方法 语法: trans

    2023年04月09日
    浏览(48)
  • 微信小程序canvas画布绘制文字自动换行

    关键步骤介绍: text为需要绘制的文本,通过换行符将text分割为words数组。 basic_height为第一行文本的高度。 get_canvas_row函数根据行宽限制将输入文本转化为不同的行,实现见下文。 text_size为设置的文本高度,h+text_size*j为每行待绘制文本的高度,绘制完成后更新h。 get_canvas_

    2024年01月17日
    浏览(51)
  • Unity UGUI的Canvas(画布)组件的介绍及使用

    Canvas(画布)是Unity UGUI系统中的一个重要组件,用于在屏幕上绘制UI元素。它是UI元素的容器,可以包含各种UI元素,如按钮、文本、图像等。Canvas组件提供了一种方便的方式来管理和渲染UI元素。 Canvas组件通过渲染器将UI元素绘制到屏幕上。它使用层级结构来管理UI元素的显

    2024年02月08日
    浏览(70)
  • 【Canvas】在HTML画布上监听鼠标点击或触摸事件

    在做h5 canvas的时候需要注意一点,html网页上用canvas组件在不同平台上交互有时候会失效,需要做兼容处理,那是因为在手机浏览器上的不是鼠标点击,就是屏幕触摸事件. 在PC机浏览器上,都是用点击事件, 需要监听画布上的鼠标点击事件,代码如下, 在手机(可触摸设备)浏览

    2024年02月16日
    浏览(54)
  • 62-JS-canvas画布高斯模糊之图像操作

    将一张图片放到canvas画布上 1.绘制图像 drawImage 2.获取当前画布上各各像素点的数据的 getImageData()

    2024年02月22日
    浏览(28)
  • Android Canvas画布saveLayer与对应restoreToCount,Kotlin

              如果把 全部注释掉,则为                   Android Canvas状态save与restore,Kotlin-CSDN博客 文章浏览阅读218次,点赞3次,收藏3次。文章浏览阅读9.6k次。文章浏览阅读1.8k次。/*Java代码 将Drawable转化为Bitmap */ Bitmap drawableToBitmap(Drawable drawable) { int width = drawable.getIntrins

    2024年02月04日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包