python - example - ttk button
Dibujar cĂrculo en Tkinter(Python) (2)
El dibujo de un círculo en un tkinter Canvas
se realiza generalmente mediante el método create_oval
. Sin embargo, suministrar el cuadro delimitador es a menudo una forma confusa de pensar en dibujar un círculo. No es particularmente difícil encontrar un atajo para ello, pero no pude encontrar a nadie más haciendo algo similar, así que lo publicaré con la esperanza de que alguien más lo encuentre útil.
Aquí hay un truco conocido como "parches de monos" en el que en realidad agregamos un miembro a la clase Tkinter
Canvas
. A continuación se muestra un programa totalmente funcional (Python 2.7), del cual el tercer párrafo es de interés. tk.Canvas.create_circle(x, y, r, options...)
a su código y puede tratar tk.Canvas.create_circle(x, y, r, options...)
como lo haría con un método incorporado, donde las opciones son las mismas que create_oval
. Hacemos algo similar para create_arc
(cuarto párrafo), y le damos la opción de especificar un ángulo end
lugar de una 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()
Resultado:
solución más simple:
from tkinter import *
root = Tk()
myCanvas = Canvas(root)
myCanvas.pack()
def create_circle(x, y, r, canvasName): #center coordinates, radius
x0 = x - r
y0 = y - r
x1 = x + r
y1 = y + r
return canvasName.create_oval(x0, y0, x1, y1)
create_circle(100, 100, 20, myCanvas)
create_circle(50, 25, 10, myCanvas)
root.mainloop()