2013-08-01 433 views
13

tkinter Canvas上画一个圆通常由​​方法完成。但是,提供边界框通常是考虑绘制圆的一种令人困惑的方式。为它创建一个快捷方式并不难,但是我找不到其他人做类似的事情,所以我会发布它,希望别人认为它有用。在Tkinter(Python)中绘制圆

回答

28

这里有一个称为“猴子修补”的技巧,我们实际上将一个成员添加到TkinterCanvas。下面是一个全功能的程序(Python 2.7),其中第三段感兴趣。将它添加到您的代码中,您可以像处理内置方法那样对待tk.Canvas.create_circle(x, y, r, options...),其中的选项与​​相同。我们对create_arc(第四段)做了类似的处理,并给出选项以指定end角度而不是extent

import Tkinter as tk 

root = tk.Tk() 
canvas = tk.Canvas(root, width=200, height=200, borderwidth=0, highlightthickness=0, bg="black") 
canvas.grid() 

def _create_circle(self, x, y, r, **kwargs): 
    return self.create_oval(x-r, y-r, x+r, y+r, **kwargs) 
tk.Canvas.create_circle = _create_circle 

def _create_circle_arc(self, x, y, r, **kwargs): 
    if "start" in kwargs and "end" in kwargs: 
     kwargs["extent"] = kwargs["end"] - kwargs["start"] 
     del kwargs["end"] 
    return self.create_arc(x-r, y-r, x+r, y+r, **kwargs) 
tk.Canvas.create_circle_arc = _create_circle_arc 

canvas.create_circle(100, 120, 50, fill="blue", outline="#DDD", width=4) 
canvas.create_circle_arc(100, 120, 48, fill="green", outline="", start=45, end=140) 
canvas.create_circle_arc(100, 120, 48, fill="green", outline="", start=275, end=305) 
canvas.create_circle_arc(100, 120, 45, style="arc", outline="white", width=6, start=270-25, end=270+25) 
canvas.create_circle(150, 40, 20, fill="#BBB", outline="") 

root.wm_title("Circles and Arcs") 
root.mainloop() 

结果:

result of code