《零基础入门学习Python》第071讲:GUI的终极选择:Tkinter8

虽然我们能用 tkinter 设计不少东西了,但是不少同学还是感觉对这个界面编程掌控得还不够多,说白了,就是我们现在还没办法随心所欲的去绘制我们想要的界面,但是不瞒你说,今天的这一节课将会给你的人生乃至人生观带来翻天覆地的变化,开个玩笑哈。

我们今天讲解 Canvas 组件,一个可以让你任性的组件,一个可以让你随心所欲去绘制界面的组件,Canvas 是一个通用的组件,通常用于显示以及编辑图形,你可以用它来绘制直线、三角形、矩形、多边形甚至是绘制其他的组件都可以。在 Canvas 上绘制对象,你可以使用 create_xxx() 的方法(xxx 表示对象类型,例如线段 line,矩形 rectangle,文本 text 等)。

举个例子:

首先,我们创建一个 Canvas 对象,叫做 w,这个对象来自于 root ,设置宽度 200,高度 100,如果就这样运行的话,得到的就是一个空白的画布,背景颜色和窗口的背景颜色是一样的,所以我们看不到它在哪里,我们可以通过设置它的 background ,设置为 white。

我们然后在它的水平方向上创建一根黄线,在中间垂直方向上绘制一条红色的虚线,然后在中间绘制一个蓝色的矩形。

黄色的横线,起点(0,50),终点(200,50),颜色填充为 yellow。

红色的垂线,起点(100,0),终点(100,100),颜色填充为 red,dash 用于绘制虚线。

dash 用法:

1. 绘制虚线
2. 该选项值是一个整数元组,元组中的元素分别代表短线的长度和间隔
3. 例如 (3, 5) 代表 3 个像素的短线和 5 个像素的间隔

绘制矩形,左下点(50,25),右上点(150,75),填充颜色为 blue

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. w = tk.Canvas(root, width = 200, height = 100, background = "white")

  4. w.pack()

  5. w.create_line(0, 50, 200, 50, fill = "yellow")

  6. w.create_line(100, 0, 100, 100, fill = "red", dash = (4, 4))

  7. w.create_rectangle(50, 25, 150, 75, fill = "blue")

  8. root.mainloop()

大家要注意的是:我们创建的 3 个对象(两条线,一个矩形),这些对象如果没有意外的情况,它会一直保留着,直到你去修改它们,它们就会被覆盖,例如这两条线,本来都是贯穿整个 Canvas 的,但是被矩形覆盖了,那么中间被覆盖的位置就看不到啦。

还有一些方法提供给我们对这些对象(称之为画布对象)进行修改,我们可以使用 coords(),itemconfig() 和 move() 方法。我们来分别演示一下:

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. w = tk.Canvas(root, width = 200, height = 100, background = "white")

  4. w.pack()

  5. line1 = w.create_line(0, 50, 200, 50, fill = "yellow")

  6. line2 = w.create_line(100, 0, 100, 100, fill = "red", dash = (4, 4))

  7. rect1 = w.create_rectangle(50, 75, 150, 25, fill = "blue")

  8. w.coords(line1, 0, 25, 200, 25)

  9. w.itemconfig(rect1, fill = "red")

  10. w.delete(line2)

  11. tk.Button(root, text = "删除全部", command = (lambda x = "all": w.delete(x))).pack() "all"其实是一个 tag, 就是画布所有对象

  12. root.mainloop()

你还可以在 Canvas 上面显示文本,可以使用 create_text() 方法。

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. w = tk.Canvas(root, width = 200, height = 100, background = "white")

  4. w.pack()

  5. w.create_line(0, 0, 200, 100, fill = "green", width = 3)

  6. w.create_line(200, 0, 0, 100, fill = "green", width = 3)

  7. w.create_rectangle(40, 20, 160, 80, fill = "green")

  8. w.create_rectangle(65, 35, 135, 65, fill = "yellow")

  9. w.create_text(100, 50, text = "Python")

  10. root.mainloop()

我们可以看到,我们设置 text 的位置为 矩形中间,文本默认是居中显示的,你还可以通过设置 anchor 让它 靠边。

使用 Canvas 基本上是无所不能,无所不包的,你要画什么图形都可以,比如说,画一个圆形或者椭圆形(事实上圆形就是特殊的椭圆形),我们来举个例子:

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. w = tk.Canvas(root, width = 200, height = 100, background = "white")

  4. w.pack()

  5. w.create_rectangle(40, 20, 160, 80, dash = (4, 4))

  6. w.create_oval(40, 20, 160, 80, fill = "pink")

  7. w.create_text(100, 50, text = "Python")

  8. root.mainloop()

椭圆的限制范围的条件和矩形是一模一样的,然后得到的椭圆就是完美的贴合这个矩形,你就明白椭圆是怎么绘制的了。事实上,绘制椭圆是先给定一个限制矩形,然后就用椭圆来填充这个限定矩形。事实上,圆形就是特殊的椭圆,只需要把这个限定矩形改成正方形即可。

然后呢,你可能还想绘制一个多边形,你可以使用 create_polygon() 方法,现在就来带大家画一个五角星,首先,要画一个五角星,我们需要确定 5 个角的坐标,高中数学只要不是体育老师教的,都知道,都能够看得懂下面的原理图。

我们这里使用三角函数确定五角星5个角的位置,因为我们知道它的中心到各个点的距离是一样的。我们就可以得到各个点的坐标。将这5个点连起来就是一个五角星了。绘制一个多边形,我们使用 create_polygon() 方法,就是依次传入每个点的坐标(A-C-E-B-D)

代码如下:

 
  1. import tkinter as tk

  2. import math

  3. root = tk.Tk()

  4. w = tk.Canvas(root, width = 200, height = 100)

  5. w.pack()

  6. center_x = 100

  7. center_y = 50

  8. r = 50

  9. points = [

  10. #左上点(A)

  11. center_x - int(r * math.sin(2 * math.pi / 5)),

  12. center_y - int(r * math.cos(2 * math.pi / 5)),

  13. #右上点(C)

  14. center_x + int(r * math.sin(2 * math.pi / 5)),

  15. center_y - int(r * math.cos(2 * math.pi / 5)),

  16. #左下点(E)

  17. center_x - int(r * math.sin(math.pi / 5)),

  18. center_y + int(r * math.cos(math.pi / 5)),

  19. #顶点(B)

  20. center_x,

  21. center_y - r,

  22. #右下点(D)

  23. center_x + int(r * math.sin(math.pi / 5)),

  24. center_y + int(r * math.cos(math.pi / 5))

  25. ]

  26. w.create_polygon(points, outline = "green", fill = "yellow") #fill 默认是 black ,黑色填充

  27. root.mainloop()

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

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

相关文章

苍穹外卖-day07

苍穹外卖-day07 本项目学自黑马程序员的《苍穹外卖》项目,是瑞吉外卖的Plus版本 功能更多,更加丰富。 结合资料,和自己对学习过程中的一些看法和问题解决情况上传课件笔记 视频:https://www.bilibili.com/video/BV1TP411v7v6/?sp…

Rust vs Go:常用语法对比(五)

题图来自 Rust vs Go 2023[1] 81. Round floating point number to integer Declare integer y and initialize it with the rounded value of floating point number x . Ties (when the fractional part of x is exactly .5) must be rounded up (to positive infinity). 按规…

KWP2000协议和OBD-K线

KWP2000最初是基于K线的诊断协议, 但是由于后来无法满足越来越复杂的需求,以及自身的局限性,厂商又将这套应用层协议移植到CAN上面,所以有KWP2000-K和KWP2000-CAN两个版本。 这篇文章主要讲基于K线的早期版本协议,认…

零售企业信息化系统建设与应用解决方案

导读:原文《零售企业信息化系统建设与应用解决方案ppt》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 完整版领取方式 如需获取完整的电子版内容参考学习…

基于Kaggle训练集预测的多层人工神经网络的能源消耗的时间序列预测(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🌈3 Matlab代码实现 🎉4 参考文献 💥1 概述 本文为能源消耗的时间序列预测,在Matlab中实现。该预测采用多层人工神经网络,基于Kaggle训练集预测未来能源消耗。 &am…

使用镜像搭建nacos集群

安装并配置 docker 1 先安装docker //1.查看操作系统的发行版号 uname -r//2.安装依赖软件包 yum install -y yum-utils device-mapper-persistent-data lvm2//3.设置yum镜像源 //官方源(慢) yum-config-manager --add-repo http://download.docker.co…

第十二章:priority_queue类

系列文章目录 文章目录 系列文章目录前言priority_queue的介绍priority_queue的使用容器适配器什么是容器适配器STL标准库中stack和queue的底层结构 总结 前言 priority_queue是容器适配器,底层封装了STL容器。 priority_queue的介绍 priority_queue文档介绍 优先…

IDEA中文UT方法执行报错问题、wps默认保存格式

wps默认保存格式、IDEA中文UT方法执行报错问题 背景 1、wps修改文件后,编码格式从UTF-8-bom变成UTF-8(notepad可以查看); 2、IDEA中文UT执行报错: 解决方案 1、语言设置中不要勾选 “Beta版。。。。” 2、cmd中执…

layui框架学习(33:流加载模块)

Layui中的流加载模块flow主要支持信息流加载和图片懒加载两部分内容,前者是指动态加载后续内容,示例的话可以参考csdn个人博客主页,鼠标移动到页面底部时自动加载更多内容,而后者是指页面显示图片时才会延迟加载图片信息。   fl…

RocketMQ 行业分享

5.0的架构发生了重大调整,添加了一层rocketmq-proxy,可以通过grpc的方式接入。 参考 https://juejin.cn/post/7199413150973984827

UE5 关于MRQ渲染器参数

最佳参数: Spatial Sample Count:使用奇数样本时临时抗锯齿会收敛 Temporal Sample Count:超过2之后,采样过大会造成TAA效果不佳 TSR:UE5最好的抗锯齿方案

AI聊天GPT三步上篮!

1、是什么? CHATGPT是OpenAI开发的基于GPT(Generative Pre-trained Transformer)架构的聊天型人工智能模型。也就是你问它答,根据网络抓去训练 2、怎么用? 清晰表达自己诉求,因为它就是一个AI助手&#…

CF1837 A-D

A题 题目链接:https://codeforces.com/problemset/problem/1837/A 基本思路: 要求计算蚂蚱到达位置 x最少需要多少次跳跃,并输出蚂蚱的跳跃方案。因为每次可以向左或向右跳跃一定距离(距离必须为整数),但是…

Web自动化测试高级定位xpath

高级定位-xpath 目录 xpath 基本概念xpath 使用场景xpath 语法与实战 xpath基本概念 XPath 是一门在 XML 文档中查找信息的语言XPath 使用路径表达式在 XML 文档中进行导航XPath 的应用非常广泛XPath 可以应用在UI自动化测试 xpath 定位场景 web自动化测试app自动化测试 …

联想拯救者笔记本切换独显直连游戏体验翻倍、火力全开“嗨”起来

最早的游戏本是由独显负责图形运算,然后直接向屏幕输出所有画面的。但独显负责所有工作,无时无刻都在耗电;撇开游戏模式下高负载的功耗不谈,即便在省电模式下功耗也比核显高得多。 英伟达发布的Optimus混合输出技术,在…

C++继承

📟作者主页:慢热的陕西人 🌴专栏链接:C 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容讲解了C继承部分相关的内容 文章目录 C继承Ⅰ. 继承的概念和…

Rviz2的自定义插件开发基础知识

1. 简介 Rviz中有不同类型的插件,每个插件都必须具有相应的基本类型,才能被RViz识别 plugin typebase typeDisplayrviz_common::DisplayPanelrviz_common::PanelToolrviz_common::ToolFrames transformation libraryrviz_common::transformation::Fram…

深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。 function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。 近期有同学反馈,function_score 的相关参数不好理解,本文将深入探讨 f…

【数据动态填充到element表格;将带有标签的数据展示为文本格式】

一&#xff1a;数据动态填充到element表格&#xff1b; 二&#xff1a;将带有标签的数据展示为文本格式&#xff1b; 1、 <el-row><el-col :span"24"><el-tabs type"border-card"><el-tab-pane label"返回值"><el-…

基于OpenCV solvePnP函数估计头部姿势

人脸识别 文章目录 人脸识别一、姿势估计概述1、概述2、姿态估计3、在数学上表示相机运动4、姿势估计需要什么5、姿势估计算法6、Levenberg-Marquardt 优化 二、solvePnP函数1、函数原型2、参数详解 三、OpenCV源码1、源码路径 四、效果图像示例参考链接 一、姿势估计概述 1、…