Python tkinter库之Canvas 物体沿着函数图像的轨迹移动

简介: Python tkinter库之Canvas 物体沿着函数图像的轨迹移动

Canvas 通过 create_xxx 方法绘制图形项之后,这些图形项井不是完全静态的图形,每个图形项都是一个独立的对象,程序完全可以动态地修改、删除这些图形项。对这些图形项的引用有两种方式:


1.通过返回值id,如: id1 = create_xxx(...);


2.通过标签 tag,如: cv.create_xxx(..., tags =('rect1'))。


• # “物体”移动的例子:
•     coord = 20,20,30,30
•     rID=tCanvas.create_rectangle(coord,outline='black',fill='red')
•     tCanvas.move(rID,50,30)



物体沿着函数图像的轨迹移动

例:先用Graph()画出轨迹,然后用 grMove() 在轨迹上移动一个小方块:

import tkinter as tk
import pyautogui as ag
from math import *
from numpy import arange as np
def Window_Open(W, H):
    X, Y = ag.size()
    winSize = str(W)+"x"+str(H)
    winPos = winSize + "+20" # + 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 Graph(funcx,funcy,x0,y0,tmin,tmax,w,h,c='blue',step=0.001):
    'xmin,xmax 自变量的取值范围; c 图像颜色'
    'x0,y0 原点坐标  w,h 横纵轴半长 step 步进'
    coord = x0-w,y0,x0+w,y0
    tCanvas.create_line(coord,fill='black')
    coord = x0,y0-h,x0,y0+h
    tCanvas.create_line(coord,fill='black')
    w1,w2=100,100
    for t in np(tmin,tmax+step,step):
        x = funcx(t)
        y = funcy(t)
        coord = x0+w1*x,y0-w2*y,x0+w1*x,y0-w2*y
        if abs(x*w1)<w and abs(y*w2)<h:
            tCanvas.create_rectangle(coord,outline=c)
    tCanvas.update()
def grMove(funcx,funcy,x0,y0,tmin,tmax,w,h,c='blue',step=0.01):
    w1,w2=100,100
    x,y = funcx(tmin), funcy(tmin)
    tx,ty=x,y
    coord = x0+w1*x-5,y0-w2*y-5,x0+w1*x+5,y0-w2*y+5
    r=tCanvas.create_rectangle(coord,outline=c,fill=c)
    for t in np(tmin,tmax+step,step):
        x = funcx(t)
        y = funcy(t)
        if abs(x*w1)<w and abs(y*w2)<h:
            tCanvas.move(r,(x-tx)*w1,(ty-y)*w2)
            tx,ty=x,y
            tCanvas.update()
if __name__ == '__main__':
    win = tk.Tk()
    Window_Open(480,480)
    tCanvas = tk.Canvas(win, width=win.winfo_width(), height=480, bg='white')
    tCanvas.pack(side="top")
    x0,y0=240,240
    a,b = 1,1.5
    fx = lambda t : a*cos(t)
    fy = lambda t : b*sin(t)
    Graph(fx,fy,x0,y0,-pi,pi,220,200)
    Graph(fy,fx,x0,y0,-pi,pi,220,200,c='green')
    grMove(fx,fy,x0,y0,-pi,pi,220,200,c='red')
    grMove(fy,fx,x0,y0,-pi,pi,220,200,c='red')
    win.mainloop()


效果图:

20210331072312272.gif


目录
相关文章
|
1天前
|
API 调度 开发者
Python中的并发编程:使用asyncio库实现异步IO
传统的Python编程模式中,使用多线程或多进程实现并发操作可能存在性能瓶颈和复杂性问题。而随着Python 3.5引入的asyncio库,开发者可以利用异步IO来更高效地处理并发任务。本文将介绍如何利用asyncio库实现异步IO,提升Python程序的并发性能。
|
2天前
|
JSON Shell 数据格式
第十章 Python常用标准库使用(必会)
第十章 Python常用标准库使用(必会)
|
2天前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
2天前
|
数据采集 数据可视化 数据处理
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
|
2天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
9 3
Python
20 0
|
3天前
|
JSON 数据格式 索引
python 又一个点运算符操作的字典库:Munch
python 又一个点运算符操作的字典库:Munch
20 0
|
1天前
|
机器学习/深度学习 人工智能 数据可视化
Python:探索编程之美
Python:探索编程之美
9 0
|
1天前
|
机器学习/深度学习 人工智能 数据处理
Python编程的魅力与实践
Python编程的魅力与实践
|
2天前
|
SQL 关系型数据库 MySQL
第十三章 Python数据库编程
第十三章 Python数据库编程