Python tkinter库之Canvas 物体沿着函数图像的轨迹移动
Python 函数 移动 图像 Canvas 物体 轨迹 tkinter
2023-09-14 09:01:28 时间
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()
效果图:
附:Graph()函数出自上一篇 《Python tkinter库之Canvas 根据函数解析式或参数方程画出图像》
相关文章
- python 访问LDAP服务器「建议收藏」
- python进制转换函数-Python中进制转换函数的使用
- python中sqrt函数用法_Python : sqrt() 函数
- python-sort函数[通俗易懂]
- python移位运算,python移位运算
- python chr()和ord()_Python函数ord
- python函数详解_INDEX函数
- 【说站】python匿名函数的好处
- 【说站】python输入一个列表求平均值
- python 内置、匿名、高阶、递归等函数(3.1)
- Python 合并 dict
- python语言关键字是_Python 关键字
- python中copy.deepcopy_Python eval
- python程序化交易实例-用 Python 实现你的量化交易策略「建议收藏」
- 学VBA还是学Python,这不是个问题!
- Python写个“点球大战”小游戏
- Python reversed函数及用法
- python全栈开发-Day13 内置函数详解编程语言
- python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域(装饰器基础)详解编程语言
- CentOS 6.4 下 Python 2.6 升级到 2.7详解编程语言
- python工具——Scalene详解编程语言
- Python实现快速连接Redis数据库(python连接redis)
- 开源新闻:开源仿生腿、Python 数据管道、数据泄露检测
- python批量下载图片的三种方法
- Python实例之wxpython中Frame使用方法