【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.mzph.cn/bicheng/27386.shtml

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

相关文章

【打工日常】docker部署一款开源的笔记管理和协作工具

一、项目介绍1.项目简述Logseq 是一个隐私优先的开源知识库。2.项目功能插件系统:允许用户根据自己的需求扩展功能,社区开发的插件可以添加新特性或改进现有功能。主题和定制:支持主题定制,用户可以根据自己的喜好更改应用程序的外观。多语言支持:包括中文、英文、土耳其语…

多类型图像OCR:基于Dify的多模态Agent实现

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模…

介绍react

什么是React React是一个用于构建用户界面的JavaScript库。 传统构建页面的方式 <script>document.getElementById(app).addEventListener(click, () > {console.log()});const div docuemnt.createElement(div)// ... </script> 早期&#xff0c;用JavaSc…

医学文献如何获取

获取医学文献的主要渠道包括以下几种&#xff1a; 1、医学数据库: 包括PubMed、MEDLINE等&#xff0c;这些是专门收录医学文献的数据库&#xff0c;涵盖广泛的医学研究内容。 2、医学期刊网站: 通过医学期刊的官方网站可以获取最新的医学研究成果&#xff0c;有些期刊提供免费…

记录一下PHP使用微信小程序支付

记录一下PHP使用微信小程序支付V3版本经历 官方文档&#xff1a;https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_0.shtml 请详细查看文档中小程序支付接入前准备&#xff08;https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml&#xff…

仿element-ui 实现自己组件库 <3>

目录 input 组件封装 v-model用在组件上 显示和隐藏密码 封装switch组件 实现转换的功能 设置checkbox input 组件封装 首先input组件的基本框架和样式&#xff1a; <div class"miao-input"><input class"miao-input_inner" > </div…

网络编程(四)

一、使用wireshark抓包分析协议头 &#xff08;一&#xff09;wireshark常用的过滤语句 tcp.port <想要查看的端口号> ip.src <想要查看的源IP地址> ip.dest <想要查看的目的IP地址> ip.addr <想要查看的IP地址>&#xff08;二&#xff09;抓包分…

无回显XXE攻击:隐秘的数据泄露技术

引言 在网络安全领域&#xff0c;数据泄露是一个严重的问题&#xff0c;而XXE&#xff08;XML External Entity&#xff09;攻击提供了一种隐秘的数据泄露手段。即使在不允许直接输出文件内容的环境中&#xff0c;攻击者也可以通过无回显技术获取敏感信息。本文将探讨无回显XX…

Burp Suite Professional 2024.5 (macOS, Linux, Windows) - Web 应用安全、测试和扫描

Burp Suite Professional 2024.5 (macOS, Linux, Windows) - Web 应用安全、测试和扫描 Burp Suite Professional, Test, find, and exploit vulnerabilities. 请访问原文链接&#xff1a;Burp Suite Professional 2024.5 (macOS, Linux, Windows) - Web 应用安全、测试和扫描…

IP服务器代理如何设置使用?

IP服务器代理&#xff08;通常称为代理IP或代理服务器&#xff09;的设置和使用方法可以根据不同的需求和场景而有所不同。以下是一个清晰的步骤指南&#xff0c;帮助你设置和使用IP服务器代理&#xff1a; 1. 选择合适的代理IP类型 根据使用目的的不同&#xff0c;可以选择不…

如何将ai集成到项目中,方法二

上一篇文章&#xff1a;如何将ai集成到radsystems项目中&#xff0c;在项目中引入ai-CSDN博客 上一篇文章内容主要针对于未实现权限分离的项目&#xff0c;这篇文章主要来说一下权限分离的项目怎么做&#xff0c;以及注意的细节。 一、编写前端router.js 二、编写前端askai.vu…

Qt实现SwitchButton滑动开关按钮组件

概述 使用Qt如何制作一个滑动开关按钮&#xff0c;同类的文章和代码网上很多&#xff0c;但很多都是pyqt编写的&#xff0c;也有c编写的&#xff0c;大家可以参考. 我这里主要是实现了一个滑动按钮&#xff0c;富有滑动动画和文字&#xff0c;话不多说&#xff0c;上代码 自定义…

用python写一个企业知识库算法

企业知识库算法是一个用于管理和检索企业内部知识的系统。在这个例子中&#xff0c;我们将使用Python编写一个简单的企业知识库算法&#xff0c;该算法将实现以下功能&#xff1a; 1. 添加知识条目 2. 搜索知识条目 我们将使用一个字典来存储知识库中的知识条目。 每个知识条…

【实践】部署时GPU与CPU

部署一个深度学习服务时&#xff0c;申请GPU和CPU资源是为了充分利用它们各自的优点和功能。虽然GPU具有强大的并行计算能力和专用显存&#xff0c;但CPU在许多任务中仍然发挥着关键作用。以下是详细的解释&#xff1a; GPU的作用 并行计算: GPU擅长处理大量并行计算任务&…

基础-02-数据通信基础

文章目录 1.信道特征1.1 数据通信概念1.2 信道特性-信道带宽W1.3 信道特性-码元和码元速率1.4 信道特性-奈奎斯特定理1.5 信道特性-香农定理1.6 带宽/码元速率/数据速率关系梳理1.7 练习题 2.信道延迟2.1 信道延迟概念2.2 信道延迟计算2.3 练习题 3. 传输介质3.1 传输介质概念3…

Python脚手架系列-DrissionPage

记录DrissionPage模块使用中的一些常常复用的代码,持续更新… 接管谷歌浏览器 from DrissionPage import ChromiumPage, ChromiumOptionsco ChromiumOptions().set_local_port(4249) driver ChromiumPage(addr_or_optsco)创建driver&#xff0c;如果浏览器已开启优先接管&am…

深入了解各种取址方式:概念、原理及实例

引言 在计算机系统中&#xff0c;取址方式&#xff08;Addressing Mode&#xff09;是指计算机指令如何指定操作数的位置。不同的取址方式提供了灵活性和效率的平衡&#xff0c;是CPU设计的重要组成部分。本文将详细介绍几种常见的取址方式&#xff0c;包括它们的概念、工作原…

4/8路 HDD/SSD 1080 车载NVR,高清车载录像机(8路1080P硬盘机

4/8路 HDD/SSD 1080 车载NVR 产品主要特点&#xff1a; -支持4/8路实时高清数字 1080P录像 -硬盘记录数据&#xff08;最大支持2TB&#xff09; -支持GPS全球定位, 可选模块 -支持WIFI高速自动下载功能, 可选模块 -内置3/4G模块&#xff0c;实时预览和远程管理&#xff0c…

浏览器实时播放摄像头数据并通过 Yolo 进行图像识别

安装 Ultralytics 之后&#xff0c;可以直接通过本地获取摄像头数据流&#xff0c;并通过 Yolo 模型实时进行识别。大多情况下&#xff0c;安装本地程序成本比较高&#xff0c;需要编译打包等等操作&#xff0c;如果可以直接通过浏览器显示视频&#xff0c;并实时显示识别到的对…