Python tkinter库之Canvas正方形旋转

简介: Python tkinter库之Canvas正方形旋转

canvas.create_rectangle() 只能画水平放置的矩形,旋转任意角度的矩形只能用 tCanvas.create_polygon() 来达成,如下图:

20210328221304422.png


旋转方式一:以左下角为定点,逆时针旋转a角度;


旋转方式二:以中心点为定点,逆时针旋转a角度;


以正方形为例, 画好坐标轴计算好各顶点坐标;


(若要旋转矩形,边长变量从一个变成长和宽两个,坐标重新计算)

计算好坐标后就可用create_polygon()写自定义函数,源代码如下:


import tkinter as tk
import pyautogui as ag
import random
from time import sleep as Delay
from math import sqrt
from math import sin
from math import cos
from math import pi
def Window_Open(W, H):
    X, Y = ag.size()
    winSize = str(W)+"x"+str(H)
    winPos = winSize + "+" + str((X - W) // 2)
    winPos += "+" + str((Y - H) // 2)
    win.geometry(winPos)
    win.resizable(False, False)
    title = u'桌面分辨率:' + str(X) + "x" + str(Y)
    title += ' ' * 5 + u'窗体大小:' + winSize
    win.title(title)
    win.update()
def Rect1(x,y,w,rad=0,c='black'):
    "x,y 左下角坐标,w=边长,rad=底边与水平线的夹角"
    a=pi*rad/180
    coord = (x,y,x + w * cos(a),y - w * sin(a),
             x + w * (cos(a)-sin(a)),
             y - w * (cos(a)+sin(a)),
             x - w * sin(a), y - w * cos(a))
    tCanvas.create_polygon(coord,fill=c)
def Rect2(x,y,w,rad=45,c='black'):
    "x,y 中心坐标,w=半长,rad=对角线与坐标轴的夹角"
    a=pi*rad/180
    coord = (x - w * sin(a)/sqrt(2),y - w * cos(a)/sqrt(2),
             x + w * cos(a)/sqrt(2),y - w * sin(a)/sqrt(2),
             x + w * sin(a)/sqrt(2),y + w * cos(a)/sqrt(2),
             x - w * cos(a)/sqrt(2),y + w * sin(a)/sqrt(2))
    tCanvas.create_polygon(coord,fill=c)
if __name__ == '__main__':
    win = tk.Tk()
    Window_Open(800,480)
    tCanvas = tk.Canvas(win, width=win.winfo_width(), height=480, bg='white')
    tCanvas.pack(side="top")
    Color = ['red','blue','green','magenta','navy','lawngreen','orange']
    w=50
    for r in range(0,1171,5):
        c = random.choice(Color)
        Rect1(180,240,w,r,c)
        tCanvas.update()
        w *= 1.004
        Delay(0.001)
    Delay(1)
    w=280
    for r in range(45,1216,5):
        c = random.choice(Color)
        Rect2(580,240,w,r,c)
        tCanvas.update()
        w *= 0.99
        Delay(0.001)
    win.mainloop()


效果图: (单步旋转角度为逆时针5度,例一边长逐渐变长;例二边长逐渐变短)

20210331072857276.gif


目录
相关文章
|
17天前
|
调度 开发者 Python
Python中的异步编程:理解asyncio库
在Python的世界里,异步编程是一种高效处理I/O密集型任务的方法。本文将深入探讨Python的asyncio库,它是实现异步编程的核心。我们将从asyncio的基本概念出发,逐步解析事件循环、协程、任务和期货的概念,并通过实例展示如何使用asyncio来编写异步代码。不同于传统的同步编程,异步编程能够让程序在等待I/O操作完成时释放资源去处理其他任务,从而提高程序的整体效率和响应速度。
|
6天前
|
XML 存储 数据库
Python中的xmltodict库
xmltodict是Python中用于处理XML数据的强大库,可将XML数据与Python字典相互转换,适用于Web服务、配置文件读取及数据转换等场景。通过`parse`和`unparse`函数,轻松实现XML与字典间的转换,支持复杂结构和属性处理,并能有效管理错误。此外,还提供了实战案例,展示如何从XML配置文件中读取数据库连接信息并使用。
Python中的xmltodict库
|
13天前
|
数据库 Python
异步编程不再难!Python asyncio库实战,让你的代码流畅如丝!
在编程中,随着应用复杂度的提升,对并发和异步处理的需求日益增长。Python的asyncio库通过async和await关键字,简化了异步编程,使其变得流畅高效。本文将通过实战示例,介绍异步编程的基本概念、如何使用asyncio编写异步代码以及处理多个异步任务的方法,帮助你掌握异步编程技巧,提高代码性能。
49 4
|
13天前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
25 2
|
18天前
|
数据采集 JSON 测试技术
Python爬虫神器requests库的使用
在现代编程中,网络请求是必不可少的部分。本文详细介绍 Python 的 requests 库,一个功能强大且易用的 HTTP 请求库。内容涵盖安装、基本功能(如发送 GET 和 POST 请求、设置请求头、处理响应)、高级功能(如会话管理和文件上传)以及实际应用场景。通过本文,你将全面掌握 requests 库的使用方法。🚀🌟
38 7
|
12天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
18天前
|
文字识别 自然语言处理 API
Python中的文字识别利器:pytesseract库
`pytesseract` 是一个基于 Google Tesseract-OCR 引擎的 Python 库,能够从图像中提取文字,支持多种语言,易于使用且兼容性强。本文介绍了 `pytesseract` 的安装、基本功能、高级特性和实际应用场景,帮助读者快速掌握 OCR 技术。
37 0
|
8天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
8天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
8天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
下一篇
无影云桌面