第一次提交问题。
我的一个对象可视化程序使用弧线作为线条之间的连接器。计算起始角度和范围。通过角度和范围的某些组合,圆弧或饼图显示为几乎完整的圆形,而不是所需的形状。
import tkinter as tk
import math
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.canvas = tk.Canvas(width=400, height=400)
self.canvas.pack(fill="both", expand=True)
# self._create_arc((100,100), (200, 300), 153.2, .570)
# self._create_arc((200,200), (300, 400), 153.2, .571)
self._create_arc((100,100), (200, 300), 172.07636660550887, .32)
self._create_arc((200,200), (300, 400), 172.07636660550887, .50)
def _create_arc(self, p0, p1, startAngle, ext):
extend_x = (self._distance(p0,p1) -(p1[0]-p0[0]))/2 # extend x boundary
extend_y = (self._distance(p0,p1) -(p1[1]-p0[1]))/2 # extend y boundary
self.canvas.create_arc(p0[0]-extend_x, p0[1]-extend_y ,
p1[0]+extend_x, p1[1]+extend_y,
extent=ext, start=startAngle,
style=tk.PIESLICE)
def _distance(self, p0, p1):
'''calculate distance between 2 points'''
return math.sqrt((p0[0] - p1[0])**2 + (p0[1] - p1[1])**2)
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
我正在运行 python 3.10.4。 Tcl/Tk 版本是 8.6
据我所知,您面临的最可能的问题是基于 create_arc 函数如何处理扩展参数。在您的代码中,您使用 0.32 和 0.50 来表示端点角度。 Tkinter 需要将这些角度解释为度数,如下所示:
def _create_arc(self, p0, p1, startAngle, ext):
extend_x = (self._distance(p0,p1) -(p1[0]-p0[0]))/2 # extend x boundary
extend_y = (self._distance(p0,p1) -(p1[1]-p1[1]))/2 # extend y boundary
self.canvas.create_arc(p0[0]-extend_x, p0[1]-extend_y ,
p1[0]+extend_x, p1[1]+extend_y,
extent=ext*360, start=startAngle,
style=tk.PIESLICE)
期待您的来信。