2013-08-01 35 views
13

tkinter Canvas üzerinde bir daire çizmek genellikle create_oval yöntemiyle yapılır. Bununla birlikte, sınırlayıcı kutunun beslenmesi genellikle bir daire çizmeyi düşünmenin kafa karıştırıcı bir yoludur. Bunun için bir kısayol ile gelmek özellikle zor değil, ama benzer bir şey yapan başka bir kimseyi bulamadım, bu yüzden başka birinin yararlı bulduğu umuduyla yayınlayacağım.Tkinter (Python) içinde çizim daire

cevap

28

Burada, "Tkinter sınıfı Canvas sınıfına gerçekten üye eklediğimiz" maymun düzeltme eki "olarak bilinen bir numara. Aşağıda, üçüncü paragrafın ilgilenildiği tam işlevli bir program (Python 2.7) bulunmaktadır. Kodunuza ekleyin ve seçeneklerin create_oval ile aynı olduğu yerleşik bir yöntem gibi tk.Canvas.create_circle(x, y, r, options...)'u da işleyebilirsiniz. create_arc (dördüncü paragraf) için benzer bir şey yapıyoruz ve extent yerine end açısını belirtme seçeneğini sunuyoruz.

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() 

Sonuç:

result of code