当前位置: 首页 > news >正文

【Tkinter界面】Canvas 图形绘制(02/5)

文章目录

  • 一、说明
  • 二、几何时使用 Canvas 组件
    • 2.1 用法
    • 2.2 简单范例
    • 2.3 对象移动
    • 2.4 对象删除
    • 2.5 文字对象显示
  • 三、画布和画布对象
    • 3.1 画布生成函数原型
    • 3.2 使用create_xxx()方法
    • 3.3 对参数**options的解释

一、说明

Canvas(画布)组件为 Tkinter 的图形绘制提供了基础。Canvas 是一个高度灵活的组件,你可以用它绘制图形和图表,创建图形编辑器,并实现各种自定义的小部件。

在这里插入图片描述

二、几何时使用 Canvas 组件

    Canvas 是一个通用的组件,通常用于显示和编辑图形。你可以用它来绘制线段、圆形、多边形,甚至是绘制其它组件。

2.1 用法

    在 Canvas 组件上绘制对象,绘制的要点是:1)可以用 create_xxx() 的方法(xxx 表示对象类型,例如线段 line,矩形 rectangle,文本 text 等)。2)返回一个流水号ID: ID = create_xxx()

Canvas 组件支持对象:

arc(弧形、弦或扇形)
bitmap(内建的位图文件或 XBM 格式的文件)
image(BitmapImage 或 PhotoImage 的实例对象)
line(线)
oval(圆或椭圆形)
polygon(多边形)
rectangle(矩形)
text(文本)
window(组件)
其中,弦、扇形、椭圆形、圆形、多边形和矩形这些“封闭式”图形都是由轮廓线和填充颜色组成的,但都可以设置为透明(传入空字符串表示透明)。

2.2 简单范例

import tkinter as tkroot = tk.Tk()w = tk.Canvas(root, width =200, height = 100)
w.pack()#画一条黄色的横线
w.create_line(0, 50, 200, 50, fill = "yellow")
#画一条红色的竖线(虚线)
w.create_line(100, 0, 100, 100, fill = "red", dash = (4, 4))
#中间画一个蓝色的矩形
w.create_rectangle(50, 25, 150, 75, fill = "blue")root.mainloop()

2.3 对象移动

    注意,添加到 Canvas 上的对象会一直保留直着。如果你希望修改它们,你可以使用:
  • coords(),
  • itemconfig()
  • move()
    方法来移动画布上的对象
import tkinter as tk
root = tk.Tk()w = tk.Canvas(root, width =600, height = 600)
w.pack()line1 = w.create_line(0, 50, 200, 50, fill = "red")
# line2 = w.create_line(100, 0, 100, 100, fill = "red", dash = (4, 4))
# rect1 = w.create_rectangle(50, 25, 150, 75, fill = "blue")def move():for i in range(100):w.coords(line1, 0 , 50+i, 200 , 50+i)print(i)tk.Button(root, text = "删除全部", command = (lambda x = "all" : w.delete(x))).pack()
tk.Button(root, text = "移动全部", command =  move   ).pack()
root.mainloop()

2.4 对象删除

或者使用 delete() 方法来删除:

import tkinter as tk
root = tk.Tk()w = tk.Canvas(root, width =600, height = 600)
w.pack()line1 = w.create_line(0, 50, 200, 50, fill = "red")
line2 = w.create_line(100, 0, 100, 100, fill = "red", dash = (4, 4))
rect1 = w.create_rectangle(50, 25, 150, 75, fill = "blue")tk.Button(root, text = "删除全部", command = (lambda x = "all" : w.delete(x))).pack()root.mainloop()

2.5 文字对象显示

你还可以在 Canvas 上显示文本,使用的是 create_text() 方法,文字对象显示与几何体不同,表现在:

  • 坐标不同
  • 字体可选择
  • 需要字符串
import tkinter as tkroot = tk.Tk()w = tk.Canvas(root, width =200, height = 100)
w.pack()w.create_text(100, 50, text = "Python") 
root.mainloop()

三、画布和画布对象

画布和画布对象的关系是:

首先,画布是根,画布对象是叶,所有操作前提是必须有个画布。对对象的操作也必须经过画布。
画布和画布对象存在消息链接。类似于窗口和控件的关系。
画布上可以管理画布对象(增删改查)

3.1 画布生成函数原型

上文示例虽然用到画布生成函数,但是没有全面系统阐述,本节中详细阐述生成函数的参数。

函数原型

Canvas(master=None, **options) (class)

master – 父组件

**options – 组件选项,下方表格详细列举了各个选项的具体含义和用法:

选项含义
background指定 Canvas 的背景颜色
bg跟 background 一样
borderwidth指定 Canvas 的边框宽度
bd跟 borderwidth 一样
closeenough1. 指定一个距离,当鼠标与画布对象的距离小于该值时,鼠标被认为在画布对象上2. 该选项是一个浮点类型的值
confine1. 指定 Canvas 组件是否允许滚动超出 scrollregion 选项指定的范围2. 默认值是 True
cursor指定当鼠标在 Canvas 上飘过的时候的鼠标样式
height1. 指定 Canvas 的高度;2. 单位是像素
highlightbackground指定当 Canvas 没有获得焦点的时候高亮边框的颜色
highlightcolor指定当 Canvas 获得焦点的时候高亮边框的颜色
highlightthickness指定高亮边框的宽度
relief1. 指定 Canvas 的边框样式;2. 默认值是 “flat”;3. 其他可以选择的值是 “sunken”,“raised”,“groove” 和 “ridge”
scrollregion1. 指定 Canvas 可以被滚动的范围;2. 该选项的值是一个 4 元组(x1, y1, x2, y2)表示的矩形
selectbackground指定当画布对象被选中时的背景色
selectborderwidth指定当画布对象被选中时的边框宽度(选中边框)
selectforeground指定当画布对象被选中时的前景色
state1. 设置 Canvas 的状态:“normal” 或 “disabled”;2. 默认值是 “normal”;3. 注意:该值不会影响画布对象的状态
takefocus1. 指定使用 Tab 键可以将焦点移动到输入框中;2. 默认是开启的,可以将该选项设置为 False 避免焦点在此输入框中;
width1. 指定 Canvas 的宽度; 2. 单位是像素
xscrollcommand1. 与 scrollbar(滚动条)组件相关联(水平方向);2. 使用方法可以参考:Scrollbar 组件
xscrollincrement1. 该选项指定 Canvas 水平滚动的“步长”;2. 例如 ‘3c’ 表示 3 厘米,还可以选择的单位有 ‘i’(英寸),‘m’(毫米)和 ‘p’(DPI,大约是 ‘1i’ 等于 ‘72p’);3. 默认值是 0,表示可以水平滚动到任意位置
yscrollcommand1. 与 scrollbar(滚动条)组件相关联(垂直方向);2. 使用方法可以参考:Scrollbar 组件;
yscrollincrement1. 该选项指定 Canvas 垂直滚动的“步长”;2. 例如 ‘3c’ 表示 3 厘米,还可以选择的单位有 ‘i’(英寸),‘m’(毫米)和 ‘p’(DPI,大约是 ‘1i’ 等于 ‘72p’);3. 默认值是 0,表示可以水平滚动到任意位置

3.2 使用create_xxx()方法

使用 create_oval() 方法绘制椭圆形(或圆形),参数是指定一个限定矩形(Tkinter 会自动在这个矩形内绘制一个椭圆):

create_oval(bbox, **options)

– 根据限定矩形 bbox 绘制一个椭圆
– 新创建的画布对象位于显示列表的顶端
– 创建成功后返回该画布对象的 ID
– 下方表格列举了各个 options 选项的具体含义:

​选项含义**options
activedash当画布对象状态为 “active” 的时候,绘制虚线
activefill当画布对象状态为 “active” 的时候,填充颜色
activeoutline当画布对象状态为 “active” 的时候,绘制轮廓线
activeoutlinestipple当画布对象状态为 “active” 的时候,指定填充轮廓的位图
activestipple当画布对象状态为 “active” 的时候,指定填充的位图
activewidth当画布对象状态为 “active” 的时候,指定边框的宽度
dash1. 指定绘制虚线轮廓;2. 该选项值是一个整数元组,元组中的元素分别代表短线的长度和间隔;3. 例如 (3, 5) 代表 3 个像素的短线和 5 个像素的间隔
dashoffset1. 指定虚线轮廓开始的偏移位置’2. 例如当 dash=(5, 1, 2, 1),dashoffset=3,则从 2 开始画虚线
disableddash当画布对象状态为 “disabled” 的时候,绘制虚线
disabledfill当画布对象状态为 “disabled” 的时候,填充颜色
disabledoutline当画布对象状态为 “disabled” 的时候,绘制轮廓线
disabledoutlinestipple当画布对象状态为 “disabled” 的时候,指定填充轮廓的位图
disabledstipple当画布对象状态为 “disabled” 的时候,指定填充的位图
disabledwidth当画布对象状态为 “disabled” 的时候,指定边框的宽度
fill1. 指定填充的颜色;2. 空字符串表示透明
offset1. 指定当点画模式时填充位图的偏移;2. 该选项的值可以是:“x,y”, “#x,y”, “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, “center”
outline指定轮廓的颜色
outlineoffset1. 指定当点画模式绘制轮廓时位图的偏移;2. 该选项的值可以是:“x,y”, “#x,y”, “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, “center”
outlinestipple1. 当 outline 选项被设置时,该选项用于指定一个位图来填充边框;2. 默认值是空字符串,表示黑色
state1. 指定该画布对象的状态;2. 可以是 “normal”,“disabled”(不可用,不响应事件)和 “hidden”(隐藏);3. 默认值是 “normal”
stipple1. 指定一个位图用于填充;2. 默认值是空字符串,表示实心
tags为创建的画布对象添加标签
width指定边框的宽度

3.3 对参数**options的解释

**options:对多参数函数的引用,其参数的表格为字典。
*options:对多参数函数的引用,其参数的表格为列表。
函数定义:
def cunn1(**options)
def cunn2(*options)
函数调用:
cc = cunn1(bg=“#ffffff”)
cc = cunn2( “#ffffff”)
对比:
**options:不关注参数顺序,但必须提供参数名称;
*options: 参数严格按顺序输入,无法提供参数名称;

http://www.lryc.cn/news/372648.html

相关文章:

  • 1_常见指令【Linux中常见30个指令的学习和使用】【万字长文】
  • 每日复盘-202406014
  • JavaScript 深拷贝和浅拷贝的实现、使用场景和存在的问题
  • 8个常用的辅助函数!!
  • 服务器数据恢复—OceanStor存储中NAS卷数据丢失如何恢复数据?
  • 54.Python-web框架-Django-免费模板django-datta-able
  • XP系统安装Node.js v8.6.0并搭建Vue2开发环境(项目兼容到Vista的IE9浏览器)
  • redis序列化
  • IOT-Tree 1.7.0实现了一个类似Node-Red的流程功能
  • nc网络收发测试-tcp客户端\TCP服务器\UDP\UDP广播
  • 程序员该有怎么样的职业素养
  • 51交通灯
  • 鸿蒙Arkts上传图片并获取接口返回信息
  • 超文本标记语言(HTML)简介
  • 使用thymeleaf直接渲染字符串
  • Spring Boot整合发送QQ邮箱功能
  • Milvus向量数据库
  • python cls的使用
  • idea中maven下载依赖缓慢解决方法
  • JS 中的各种距离 scrollTop?clientHeight?
  • 继承-进阶-易错点
  • 【图论应用】使用多路图(multigraph)对上海地铁站点图建模,并解决最短路径问题
  • RabbitMQ安装配置,封装工具类,发送消息及监听
  • iOS接入Flutter
  • 【ubuntu】用户添加root权限
  • 设计通用灵活的LabVIEW自动测试系统
  • C# WinForm —— 35 StatusStrip 介绍
  • 如何应对生活中的不确定性:仁者安仁,知者利仁。
  • C#面:请解释C#接口的显式实现有什么意义
  • STM32项目分享:智能窗帘系统