python - python 中带有箭头的简单 2d 表面?

标签 python canvas rotation tkinter 2d

我以前没有用过 python。我需要做一个非常简单的 2d 表面,我可以在其中放置箭头,然后能够更改箭头的位置和角度。

我开始在 tkinter 中构建类似的东西,但据我了解,您无法旋转图像。据我了解,只能旋转多边形。将箭头绘制为多边形似乎有点过于复杂。

有没有其他工具更适合这种简单的东西?

谢谢

最佳答案

Tkinter 是完成此类简单任务的绝佳选择。您几乎可以肯定已经安装了它,并且 Canvas小部件非常强大。它有内置的工具来绘制末端有箭头的线,并且旋转非常简单。

不要让有关 Tkinter 的“常识”影响您——它是一个现代、稳定且极其易于使用的工具包。您不能用它创建下一个 photoshop 或 iMovie,但对于大多数人和大多数应用程序来说,这是一个非常可靠、实用的选择。

这是一个快速而肮脏的例子:

import Tkinter as tk
import math

class ExampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.canvas = tk.Canvas(self, width=400, height=400)
        self.canvas.pack(side="top", fill="both", expand=True)
        self.canvas.create_line(200,200, 200,200, tags=("line",), arrow="last")
        self.rotate()

    def rotate(self, angle=0):
        '''Animation loop to rotate the line by 10 degrees every 100 ms'''
        a = math.radians(angle)
        r = 50
        x0, y0 = (200,200)
        x1 = x0 + r*math.cos(a)
        y1 = y0 + r*math.sin(a)
        x2 = x0 + -r*math.cos(a)
        y2 = y0 + -r*math.sin(a)
        self.canvas.coords("line", x1,y1,x2,y2)
        self.after(100, lambda angle=angle+10: self.rotate(angle))

app = ExampleApp()
app.mainloop()

关于python - python 中带有箭头的简单 2d 表面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12529938/

相关文章:

python - Pandas/Python 过滤 DF 的列值

javascript - 如何使用 JavaScript 和 HTML Canvas 创建音频频谱?

ios - 旋转(固定端)带有两个角度之间动画的 imageView

java - 获取矩阵的当前旋转 - 使用库?

ios - UILabel具有自动布局的丑陋旋转动画

python - 访问 pandas 系列中的第一个列表项

python - Slack API - 用于检索斜杠命令的队列

python - 在矩阵中插入一项

javascript - 如何从 openlayers 6 中 map 的 postcompose 事件获取 Canvas

wpf在调整 Canvas 父级时拉伸(stretch)一条线