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

news/2024/11/24 1:40:28/

虽然我们能用 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.ppmy.cn/news/988227.html

相关文章

Redis Sentinel 及 Redis Cluster

Redis Sentinel Redis-Sentinel(哨兵模式)是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是…

微信小程序开发每日一写--5

按钮的使用和底层逻辑的实现&#xff08;暂未成功&#xff09; WXML&#xff1a; <button class"bth1"type"primary" >按钮</button>JS&#xff1a; // index.js // 获取应用实例 //const app getApp() Page({/*bthTapHandler(e){//按钮的…

飞行动力学 - 第15节-part 1-操纵力与铰链力矩 之 基础点摘要

飞行动力学 - 第15节-part 1-操纵力与铰链力矩 之 基础点摘要 1. HOTAS全拼2. 操纵杆力&铰链力矩3. 铰链力矩4. 气动补偿&#xff08;Aerodynamic Balancing&#xff09;5. 参考资料 1. HOTAS全拼 Hands On Throttle And Stick 2. 操纵杆力&铰链力矩 操纵杆力&#…

代码随想录算法训练营第二十五天 | 读PDF复习环节3

读PDF复习环节3 本博客的内容只是做一个大概的记录&#xff0c;整个PDF看下来&#xff0c;内容上是不如代码随想录网站上的文章全面的&#xff0c;并且PDF中有些地方的描述&#xff0c;是很让我疑惑的&#xff0c;在困扰我很久后&#xff0c;无意间发现&#xff0c;其网站上的讲…

【打点】pv, uv

一、pv, uv是什么&#xff1f; 1、PV(访问量)&#xff1a;即Page View, 具体是指网站的是页面浏览量或者点击量&#xff1b; 2、UV(独立访客)&#xff1a;即Unique Visitor&#xff0c;访问您网站的一台电脑客户端为一个访客。 二、使用步骤 1.定义方法 代码如下&#xff0…

NodeJs后端项目使用docker打包部署

docker安装看之前的文章 默认已经安装好docker并且配置没有问题 拉取项目 https://gitee.com/coder-msc/docker-node 本地跑一个看看 pnpm install pnpm start 本地访问 http://localhost:1301/getname?name%E5%93%88%E5%88%A9%E6%B3%A2%E7%89%B9项目整个上传服务器 查看…

Simulink仿真模块 - Data Type Conversion

Data Type Conversion将输入信号转换为指定的数据类型 在仿真库中的位置为:Simulink / 常用模块 Simulink / Signal Attributes 模型为: 说明 Data Type Conversion 模块可将任何 Simulink 数据类型的输入信号转换为您指定的数据类型。 注意 要通过指定模块参数来控…

Git-分支管理

文章目录 1.分支管理2.合并冲突3.合并模式4.补充 1.分支管理 Git分支管理是指在Git版本控制系统中&#xff0c;使用分支来管理项目的不同开发线路和并行开发的能力。通过分支&#xff0c;开发者可以在独立的环境中进行功能开发、bug修复等工作&#xff0c;而不会影响到主分支上…