Tkinter的Canvas控件

news2024/9/22 7:27:55

Canvas控件是Tkinter界面设计的一个画图工具,也可以用它导入外部图案到界面中  

创建画布

import tkinter as tk 
root=tk.Tk()               #创建界面
root.title('Canvas')     #界面命名
root.geometry('500x300')        #设置界面大小
canvas=tk.Canvas(root)          #创建画布
canvas.pack()                         #放置画布
root.mainloop()                       #放置界面

Canvas画图

1. 矩形

canvas.create_rectangle(x1,y1,x2,y2,fill,outline) 

注:在左上角为(x1,y1),右下角为(x2,y2)的矩形中画一个矩形,fill为填充的颜色,outline为边框颜色

2. 椭圆

canvas.create_oval(x1,y1,x2,y2,fill,outline) 

注:在左上角为(x1,y1),右下角为(x2,y2)的矩形中画一个椭圆,fill为填充的颜色,

3. 直线

canvas.create_line(x1,y1,x2,y2,fill) 

注:从(x1,y1)到(x2,y2)画一条直线,fill为直线颜色

4. 扇形

canvas.create_arc(x1,y1,x2,y2,fill,outline,start,extent) 

注:在左上角为(x1,y1),右下角为(x2,y2)的矩形中画一个扇形,start为开始角度,extent为结束角度 

程序设计

在root界面中画一条直线,一个矩形,一个圆形和一个扇形,并且单机按钮可以移动图形 

import tkinter as tk
root=tk.Tk()
root.title('Canvas')
width=500
height=300
screenwidth=root.winfo_screenwidth()
screenheight=root.winfo_screenheight()
x=(screenwidth-width)//2
y=(screenheight-height)//2
root.geometry('%dx%d+%d+%d'%(width,height,x,y))
canvas=tk.Canvas(root,width=width,height=height,bg='yellow')
line=canvas.create_line(50,50,100,100,fill='red')
oval=canvas.create_oval(150,50,200,100,outline='black',fill='blue')
rectangle=canvas.create_rectangle(250,50,300,100,outline='black',fill='pink')
arc=canvas.create_arc(350,50,400,150,start=0,extent=180,outline='black',fill='green')
def move():
    canvas.move(line,0,10)
    canvas.move(oval,0,10)
    canvas.move(rectangle,0,10)
    canvas.move(arc,0,10)
canvas.pack()
tk.Button(root,text='Move',width=5,bg='white',command=move).place(x=225,y=200)
root.mainloop() 

运行结果 

9905af866b1144c1aa8dd1442b13bd85.png

Canvas导入图片 

tkinter中的Canvas只能直接导入动图,即gif格式的图片,其他图片需要使用ImageTk库的PhotoImage()函数进行导入

1. 导入gif图片

canvas.create_image() 

注:括号中填入图片的地址即可 

2. 导入jpg图片

首先需要打开jpg图片并命名为img

img=Image.open('d:\\图片\\1.jpg')

然后我们把它缩放一下与画板大小一致

img.thumbnail((width,height))

将jpg格式的图片转换成tkinter可识别的图像

photo=ImageTk.PhotoImage(img)

将图片导入即可

canvas.create_image(0,0,image=photo,anchor='nw')

完整程序

import tkinter as tk
from PIL import Image,ImageTk
root=tk.Tk()
root.title('Canvas')
width=500
height=300
screenwidth=root.winfo_screenwidth()
screenheight=root.winfo_screenheight()
x=(screenwidth-width)//2
y=(screenheight-height)//2
root.geometry('%dx%d+%d+%d'%(width,height,x,y))
canvas=tk.Canvas(root,width=width,height=height)
img=Image.open('d:\\图片\\1.jpg')
img.thumbnail((width,height))
photo=ImageTk.PhotoImage(img)
canvas.create_image(0,0,image=photo,anchor='nw')
canvas.pack()
root.mainloop() 

运行结果 

ff668fb1dba14fb98484306bd80f550c.png

 

 

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

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

相关文章

03_class创建device创建_kobject_uevent发送

总结 根据之前的kobject知道 /sys/目录下的每个文件夹都是一个 kobject的对象 使用class_create() 创建 /sys/class/xxx目录 同时返回class对象 使用device_create() 创建/sys/class/xxx/yyy目录 和创建/dev/yyy的文件节点 同时返回device对象 class和device 都间接继承于kobj…

【老卫搞机】135期:华为开发者联盟社区2022年牛人之星奖品开箱!

首先祝大家兔年大吉,身体安康,钱兔似锦!今天咱们来开箱一件特殊的奖品,来自华为开发者联盟社区的新年祝福——2022年牛人之星。 华为有钱!惯例用的是顺丰快递,各位看一下这里面是有很多件的 有这两件。第一…

三、TCP/IP---ARP和ICMP协议

ARP协议 简介:号称TCP/IP中最不安全的协议,安全工具,黑客工具大多数基于ARP协议。它是地址解析协议,用于实现从IP到MAC地址的映射,即询问目标Ip对应的MAC地址是多少,局域网通信不仅需要源目地址封装&#…

学习率衰减、局部最优、Batch归一化、Softmax回归

目录1.学习率衰减(Learning rate decay)在训练初期,梯度下降的步伐大一点,开始收敛的时候,小一些的学习率能让步伐小一些。1 epoch 遍历一遍训练集学习率衰减公式:例:假设衰减率decayrate 1,0.2epochNumα…

蓝桥杯-刷题-补基础

十道入门题 题目来源,题目,简单解析,代码,输入输出 目录 前言 一,汉诺塔 二,判断闰年 三,大写变小写 四,破译密码 五,反向数相加 六,Excel表中的列号 七,饮料兑换 八,角谷猜想 九,数字统计…

小喵2022年的年度总结,啊滴妈呀,开了眼了。

宝子,你不点个赞吗?不评个论吗?不收个藏吗? 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重…

Qt扫盲- QUdpSocket 类理论总结

QUdpSocket 类理论总结一、概述二、使用流程三、QNetworkDatagram 简述一、概述 UDP (User Datagram Protocol)是一种轻量级的、不可靠的、面向数据报的、无连接的协议。当可靠性不重要时,可以使用它。QUdpSocket是QAbstractSocket的子类,允许发送和接收…

SpringBoot+Vue--token,vue导航守卫,axios拦截器-笔记3

自己学习记录,写的不详细,没有误导,不想误导 大概的登录逻辑,前后端完整实现: 1.用户名,密码验证成功后,后端签发token返回给前端 2.前端把token保存到本地存储 3.每次请求前,通过axios请求拦截器,统一发送token 4.通过Vue导航守卫,和axios响应拦截器,统一保护页面 新建个…

【华为上机真题 2023】事件推送

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

机制设计原理与应用(四)预算可行的拍卖机制

文章目录4 预算可行的拍卖机制4.1 特征4.2 使用案例4.3 拍卖设计问题4.4 单调次模函数(Monotone Submodular Function)4.4.1 分配算法4.4.2 关键支付计划4.4.3 特性4.5 在线预算可行的拍卖机制4.5.1 Secretary Problem(A Optimal Stopping Problem)4.5.2…

如何与他人交流-第5期

上期我们讲了打破预期,顺应主体这期我们来讲讲如何建立亲和关系(关系侧)我的别人交流,只有在不把别人当成对象(工具人),而是把对方当成主体的情况下(让别人感受到尊重),这是相互尊重的终极本质,也是唯一方法.把别人当人看.认同对方,对方也会认同你.自信从何而来自信本意为相信自…

信息论复习—连续信源、信道及容量

目录 连续信源的熵: 连续信源离散化后的概率空间: 连续信源离散化后的熵: 连续信源的绝对熵: 连续信源的相对熵: 连续信源的条件熵: 连续信源的相对条件熵: 连续信源相对熵的最大化&#…

李宏毅ML-卷积神经网络CNN

李宏毅ML-卷积神经网络CNN 文章目录李宏毅ML-卷积神经网络CNNImage ClassificationConvolutional Layer1. Neural Version StoryReceptive FieldParameter Sharing2. Filter Version StoryFilterParameter Sharing3. Summary of Two VersionsPooling LayerThe Whole CNNDrawbac…

Hyperbolic geometry (双曲几何简介)

ContentsManifolds: A Gentle IntroductionManifoldsTangent SpacesMetric TensorRiemannian Manifolds (黎曼流形)Hyperbolic Geometry and Poincar EmbeddingsCurvature (曲率)Euclidean and Non-Euclidean GeometriesHyperbolic SpaceMinkowski SpaceHyperboloid (双曲面)Th…

树和森林(快来瞧)

森林的定义 森林是由多颗互不相交的树所构成的树的集合,即森林包含多棵树,每一棵树都有自己的根结点。一棵树也可以看成森林。 树的表示及基本操作 1.树(一般树)的表示方法 1.1树的双亲表示法 树的双亲表示法是将树的各个节点…

现场工程师出手-PCAPHub与云SSH隧道稳妥实现异地LAN工业联测

在去年,因为众所周知的因素影响,项目的甲方主动提出延缓设备的交付。作为乙方,尽管项目延缓是甲方提出的,但依旧希望按期交付,这样才能回款,熬过一年。其实,2022年初,几类传感器、压…

S7-1200PLC与ABB机器人进行PROFINET通信的具体方法和步骤详解

S7-1200PLC与ABB机器人进行PROFINET通信的具体方法和步骤详解 1. TIA博途一侧的配置: 当我们安装好RobotStudio软件后,可以在以下的目录中C:\ProgramData\ABB Industrial IT\Robotics IT\DistributionPackages\ABB.RobotWare-6.08.0134\RobotPackages\RobotWare_RPK_6.08.013…

【JavaWeb】JavaScript基础语法(上)

✨哈喽,进来的小伙伴们,你们好耶!✨ 🛰️🛰️系列专栏:【JavaWeb】 ✈️✈️本篇内容:JavaScript基础语法(上)! 🚀🚀代码托管平台github:JavaWeb代码存放仓库&#xff01…

ESP32设备驱动-TSL2561亮度传感器驱动

TSL2561亮度传感器驱动 1、TSL2561介绍 TSL2560 和 TSL2561 是第二代环境光传感器器件。每个都包含两个集成模数转换器 (ADC),用于集成来自两个光电二极管的电流。两个通道的整合同时发生。转换周期完成后,转换结果分别传送到通道 0 和通道 1 数据寄存器。传输是双缓冲的,…

【头歌】单链表的基本操作

单链表的基本操作第1关:单链表的插入操作任务描述本关任务:编写单链表的初始化、插入、遍历三个操作函数。相关知识链表是线性表的链式存储结构的别称,特点是以“指针”指示后继元素,因此线性表的元素可以存储在存储器中任意一组存…