2013-08-01 15 views
13

Rysowanie koła na tkinter Canvas jest zwykle wykonywane przy użyciu metody create_oval. Jednak dostarczanie obwiedni jest często mylącym sposobem myślenia o rysowaniu okręgu. Nie jest szczególnie trudno wymyślić dla niego skrót, ale nie mogłem znaleźć nikogo innego, który zrobiłby coś podobnego, więc opublikuję go w nadziei, że ktoś inny uzna to za przydatne.Narysuj okrąg w Tkinter (Python)

Odpowiedz

28

Oto sztuczka znana jako "łatanie małp", w której dodajemy członka do klasy TkinterCanvas. Poniżej znajduje się w pełni funkcjonujący program (Python 2.7), którego interesujący jest akapit trzeci. Dodaj go do swojego kodu i możesz traktować tk.Canvas.create_circle(x, y, r, options...) tak samo, jak metodę wbudowaną, gdzie opcje są takie same, jak w przypadku opcji create_oval. Robimy coś podobnego dla create_arc (czwarty akapit) i dajemy możliwość określenia kąta end zamiast 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() 

Wynik:

result of code