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

文章目录

  • 一、说明
  • 二、画布和画布对象
    • 2.1 画布坐标系
    • 2.2 鼠标点中画布位置
    • 2.3 画布对象显示的顺序
    • 2.4 指定画布对象
  • 三、你应该知道的画布对象操作
    • 3.1 什么是Tag
    • 3.2 操作Tag的函数

https://www.cnblogs.com/rainbow-tan/p/14852553.html

一、说明

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

二、画布和画布对象

2.1 画布坐标系

由于画布可能比窗口大(带有滚动条的 Canvas 组件),因此 Canvas 组件可以选择使用两种坐标系:

  • 窗口坐标系:以窗口的左上角作为坐标原点
  • 画布坐标系:以画布的左上角作为坐标原点
    将窗口坐标系转换为画布坐标系,可以使用 canvasx() 或 canvasy() 方法:
def callback(event):canvas = event.widgetx = canvas.canvasx(event.x)y = canvas.canvasy(event.y)print canvas.find_closest(x, y)

2.2 鼠标点中画布位置

import tkinter as tk
root = tk.Tk()
w = tk.Canvas(root, width=400, height=400)
w.pack()def Do_But():
# 查看所有画布对象的IDss = w.find_all()for i in ss:coords = w.coords(i)print(i,coords)def paint(event):x1, y1 = (event.x - 1), (event.y - 1)x2, y2 = (event.x + 1), (event.y + 1)s=w.create_oval(x1, y1, x2, y2, fill="black")print(s)w.bind("<B1-Motion>", paint)tk.Label(root, text="按住鼠标左键并移动,开始绘制你的理想蓝图吧……").pack(side="bottom")
tk.Button(root, text="正圆", width=10, height=1, command=Do_But).pack(side="left")
root.mainloop()

2.3 画布对象显示的顺序

Canvas 组件中创建的画布对象都会被列入显示列表中,越接近背景的画布对象位于显示列表的越下方。显示列表决定当两个画布对象重叠的时候是如何覆盖的(默认情况下新创建的会覆盖旧的画布对象的重叠部分,即位于显示列表上方的画布对象将覆盖下方那个)。当然,显示列表中的画布对象可以被重新排序。
在这里插入图片描述

2.4 指定画布对象

Canvas 组件提供几种方法让你指定画布对象:

  • Item handles
  • Tags
  • “all”
  • “current”

1)Item handles
当你在 Canvas 组件上创建一个画布对象的时候,Tkinter 将自动为其指定一个在该 Canvas 组件中独一无二的整型值。然后各种 Canvas 的方法可以通过这个值操纵该画布对象。

2)Tags
是附在画布对象上的标签,Tags 由普通的非空白字符串组成。一个画布对象可以与多个 Tags 相关联,一个 Tag 也可用于描述多个画布对象。然而,与 Text 组件不同,没有指定画布对象的 Tags 不能进行事件绑定和配置样式。也就是说,Canvas 组件的 Tags 是仅为画布对象所拥有。

Canvas 组件预定义了两个 Tags:“all” 和 “current”

3) “all”
表示 Canvas 组件中的所有画布对象
4)“current”
“current” 表示鼠标指针下的画布对象(如果有的话)

三、你应该知道的画布对象操作

3.1 什么是Tag

Tag是个签,可以对画布对象指定,画布对象对象可以:没有标签、拥有多个标签。
标签的意义,在于对同类对象进行标签分类。
在这里插入图片描述
tags的说明

Tags 是附在画布对象上的标签,Tags 由普通的非空白字符串组成。一个画布对象可以与多个 Tags 相关联,一个 Tag 也可用于描述多个画布对象。
Canvas 组件预定义了两个 Tags:“all” 和 “current”
“all” 表示 Canvas 组件中的所有画布对象
“current” 表示鼠标指针下的画布对象(如果有的话)

3.2 操作Tag的函数

  • *addtag(tag, method, args)
    – 添加一个 Tag 到一系列画布对象中
    – 指定添加 Tag 的位置,可以是:“above”,“all”,“below”,“closest”,“enclosed”,“overlapping” 或 “withtag”
    – args 是附加参数,请参考下方等同的方法

  • addtag_above(tag, item)
    – 为显示列表中 item 上方的画布对象添加 Tag
    – 该方法相当于 addtag(tag, “above”, item)
    – item 可以是单个画布对象的 ID,也可以是某个 Tag

  • addtag_all(tag)
    – 为 Canvas 组件中所有的画布对象添加 Tag
    – 该方法相当于 addtag(tag, “all”)

  • addtag_below(tag, item)
    – 为显示列表中 item 下方的画布对象添加 Tag
    – 该方法相当于 addtag(tag, “below”, item)
    – item 可以是单个画布对象的 ID,也可以是某个 Tag

  • addtag_closest(tag, x, y, halo=None, start=None)
    – 将 Tag 添加到与给定坐标(x, y)相临近的画布对象
    – 可选参数 halo 指定一个距离,表示以(x, y)为中心,该距离内的所有画布对象均添加 Tag
    – 可选参数 start 指定一个画布对象,该方法将为低于但最接近该对象的画布对象添加 Tag
    – 该方法相当于 addtag(tag, “closet”, x, y, halo=None, start=None)
    – 注1:使用的是画布坐标系
    – 注2:如果同时由几个画布对象与给定坐标(x, y)的距离相同,则为位于显示列表上方的那个画布对象添加 Tag

  • addtag_enclosed(tag, x1, y1, x2, y2)
    – 为所有坐标在矩形(x1, y1, x2, y2)中的画布对象添加 Tag
    – 该方法相当于 addtag(tag, “enclosed”, x1, y1, x2, y2)

  • addtag_overlapped(tag, x1, y1, x2, y2)
    – 跟 addtag_enclosed() 方法相似,不过该方法范围更广(即使画布对象只有一部分在矩形中也算)
    – 该方法相当于 addtag(tag, “overlapping”, x1, y1, x2, y2)

  • addtag_withtag(tag, item)
    – 为 item 参数指定的画布对象添加 Tag
    – item 参数如果指定一个 Tag,则为所有拥有此 Tag 的画布对象添加新的 Tag
    – item 参数如果指定一个画布对象,那么只为其添加 Tag
    – 该方法相当于 addtag(tag, “withtag”, item)
    – item 可以是单个画布对象的 ID,也可以是某个 Tag

  • *bbox(args)
    – 返回一个四元组(x1, y1, x2, y2)用于描述 args 指定的画布对象所在的矩形范围
    – 如果 args 参数忽略,返回所有的画布对象所在的矩形范围

  • canvasx(screenx, gridspacing=None)
    – 将窗口坐标系的 X 坐标(screenx)转化为画布坐标系
    – 如果提供 gridspacing 参数,则转换结果将为该参数的整数倍

  • canvasy(screeny, gridspacing=None)
    – 将窗口坐标系的 Y 坐标(screenx)转化为画布坐标系
    – 如果提供 gridspacing 参数,则转换结果将为该参数的整数倍

  • *coords(args)
    – 如果仅提供一个参数(画布对象),返回该画布对象的坐标 (x1, y1, x2, y2)
    – 你可以通过 coords(item, x1, y1, x2, y2) 来移动画布对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/350365.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重塑IT审计的未来:数智化审计赋能平台的创新与实践

重塑IT审计的未来&#xff1a;数智化审计赋能平台的创新与实践 一、当前企业开展IT审计面临的挑战 随着信息技术的快速发展、企业数字化转型的持续深入&#xff0c;以及网络安全合规要求的不断增强&#xff0c;企业开展新型IT审计重要性越来越突出&#xff0c;但实施难度却越来…

阿里新发布的UniAnimate现高效人像动画生成;在ComfyUI中使用Stable 3模型;音频版的gpt2o;将 PDF 文档转换为音频播客

✨ 1: UniAnimate 阿里新发布的UniAnimate通过统一的视频扩散模型&#xff0c;实现高效人像动画生成&#xff0c;支持长视频生成 UniAnimate 是一种专注于一致性人像动画生成的统一视频扩散模型。该模型通过映射参考图像、姿势指导和噪声视频到一个共同特征空间&#xff0c;实…

Docker笔记-Debian容器内搭建ssh服务

登陆容器之后修改密码&#xff1a; passwd 密码设置完成后安装openssh-server apt-get install openssh-server 修改端口号为50022并添加配置 vim /etc/ssh/sshd_config 修改成 Port 50022 PasswordAuthentication yes PermitRootLogin yes 启动 rootlinux:~# /etc/in…

Linux文件与内容查阅、归档压缩

#Linux系统基础 文件与内容查找、归档压缩 find命令搜索文件 grep对文件的内容进行搜索 tar命令进行文件的压缩与解压缩 一、文件的查找 格式实例&#xff1a;find . -name "123.txt"说明find起始目录查找类型查找条件./ 或 .-name“123.txt”在当前目录中查找…

idea打开hierarchy面板

hierarchy&#xff1a;查看类层级关系图 不同版本的IDEA的快捷键不一样&#xff0c;同时如果修改了IDEA快捷键&#xff0c;也可能会不一样&#xff0c;具体查看可通过IDEA上方的Navigate来查看navigate--Type Hierarchy&#xff0c;就可以看见其快捷键了&#xff0c;我的快捷键…

统计信号处理基础 习题解答10-17

题目&#xff1a; 在选择不含信息的或者不假设任何先验知识的先验PDF时,我们需要从数据中得到最大的信息量。在这种方式下,数据是了解未知参数的主要贡献者。利用习题10.15的结果,这种方法可以通过选择使I最大的来实现。对于例10.1的高斯先验PDF,该如何选择和2使得 是不含信息…

【Vue】自学笔记(四)

上一篇&#xff1a;Vue笔记&#xff08;三&#xff09;-CSDN博客 1.VueCli自定义搭建项目 先确保安装了全局工具VueCli 如果没有&#xff0c;则先运行命令 npm i vue/cli -g 选择最后一个自定义搭建项目 选择需要自动搭建的功能 这里我需要router和css预处理器就空格勾选上&…

liunx常见指令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 二、安装环境 1.租借服务器 2.下载安装 XShell 3.使用xshll登录服务器 三、Linux基础命令 一、文件和命令 ​编辑1、cd 命令 2、pwd 命令 3、ls 命令 4、cp 命令 …

栈的实现详解

目录 1. 栈1.1 栈的概念及结构1.2 栈的实现方式1.3 栈的应用场景 2. 栈的实现2.1 结构体2.2 初始化2.3 销毁2.4 入栈2.5 出栈2.6 获取栈顶元素2.7 判空2.8 获取个数 3. test主函数4. Stack.c文件5. Stack.h文件6. 运行展示 1. 栈 1.1 栈的概念及结构 栈&#xff1a;一种特殊的…

【机器学习300问】112、什么是特征点检测?

特征点检测是计算机视觉中的一种技术&#xff0c;用于识别图像中具有显著局部特征的点。这项技术在多个领域内扮演着核心角色&#xff0c;包括图像识别、三维重建、运动跟踪和图像匹配等。 一、特征点任务的目的 在计算机视觉&#xff08;CV&#xff09;中&#xff0c;特征点检…

MFC基础学习应用

MFC基础学习应用 1.基于对话框的使用 左上角为菜单键&#xff08;其下的关于MFC主要功能由IDD_ABOUTBOX决定) 附图 右下角为按钮&#xff08;基本功能由IDD_DIALOG决定,添加按钮使用由左上角的工具箱完成) 附图 2.自行添加功能与按钮//功能代码 void CMFCApplication4Dlg:…

课设--学生成绩管理系统

欢迎来到 Papicatch的博客 文章目录 &#x1f349;技术核心 &#x1f349;引言 &#x1f348;标识 &#x1f348;背景 &#x1f348;项目概述 &#x1f348; 文档概述 &#x1f349;可行性分析的前提 &#x1f348;项目的要求 &#x1f348;项目的目标 &#x1f348;…

简易五子棋

简介 使用Java实现简易五子棋 规则介绍 游戏使用一个标准的1515方格的棋盘&#xff0c;双方分别用黑白两种颜色的棋子进行对战。黑子先行&#xff0c;双方轮流在空棋盘的交叉点上落子&#xff0c;每人一次只能落一子。游戏的目标是让自己的五颗棋子连成一线&#xff0c;这条…

2024-06-08 Unity 编辑器开发之编辑器拓展9 —— EditorUtility

文章目录 1 准备工作2 提示窗口2.1 双键窗口2.2 三键窗口2.3 进度条窗口 3 文件面板3.1 存储文件3.2 选择文件夹3.3 打开文件3.4 打开文件夹 4 其他内容4.1 压缩纹理4.2 查找对象依赖项 1 准备工作 ​ 创建脚本 “Lesson38Window.cs” 脚本&#xff0c;并将其放在 Editor 文件…

01——生产监控平台——WPF

生产监控平台—— 一、介绍 VS2022 .net core(net6版本&#xff09; 1、文件夹&#xff1a;MVVM /静态资源&#xff08;图片、字体等&#xff09; 、用户空间、资源字典等。 2、图片资源库&#xff1a; https://www.iconfont.cn/ ; 1.资源字典Dictionary 1、…

5.数据仓库与数据挖掘期末复习

ETL的含义Extract 、 Transformation、Load。ODS的全称Operational Data Store。 DW全称 Data WarehourseDM全称是Data Mart数据仓库数据抽取时所用到技术是增量、全量、定时、调度STAGE层作用是提供业务系统数据文件的临时存储ODS层作用ods提供业务系统细节数据长期沉淀MID层…

Go TOKEN机制与跨域处理方式

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【Python推导式秘籍】:一行代码的艺术,高效数据处理之道

文章目录 &#x1f68b;Python推导式&#x1f680;一、列表推导式&#x1f308;1. 了解推导式❤️2. 实践&#x1f4a5;3. 总结 &#x1f680;二、字典推导式&#x1f308;1. 了解字典推导式❤️2. 实践&#x1f4a5;3. 总结 &#x1f680;三、集合推导式&#x1f308;1. 了解集…

Sobel边缘检测

声明&#xff1a;学习过程中的知识总结&#xff0c;欢迎批评指正。 基本原理 灰度处理&#xff1a;边缘检测是基于图像亮度变化实现的&#xff0c;而图像的亮度信息通过灰度图像体现&#xff0c;因此需要把彩色图像转换成灰度图像。平滑处理&#xff1a;可以使用高斯滤波等滤…

SUSTAINABILITY,SCIESSCI双检期刊还能投吗?

本期&#xff0c;小编给大家介绍的是一本MDPI出版社旗下SCIE&SSCI双检“毕业神刊”——SUSTAINABILITY。据悉&#xff0c;早在2024年1月&#xff0c;ElSEVIER旗下的Scopus数据库已暂停收录检索期刊SUSTAINABILITY所发表文章&#xff0c;同时重新评估是否继续收录该期刊。随…