Tkinter 画布创建圆弧有时显示不正确

问题描述 投票:0回答:1

第一次提交问题。

我的一个对象可视化程序使用弧线作为线条之间的连接器。计算起始角度和范围。通过角度和范围的某些组合,圆弧或饼图显示为几乎完整的圆形,而不是所需的形状。

像这样: Tkinter arc 这是生成此代码的代码:

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

python tkinter automatic-ref-counting
1个回答
0
投票

据我所知,您面临的最可能的问题是基于 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)

期待您的来信。

© www.soinside.com 2019 - 2024. All rights reserved.