繁体   English   中英

创建椭圆形Python Tkinter画布

[英]Create Oval Python Tkinter Canvas

我想在python tkinter中创建此形状: 在此处输入图片说明

但是我唯一需要使用的选项是

canvas.create_polygon
canvas.create_line
canvas.create_arc
canvas.create_oval

以上所有这些选项均无法生成这种形状。 有没有其他选择或使用这些选项创建此形状的方法?

正如@martineau所说, create_arc()是方法,但了解tkinter的create_oval()至关重要,因为弧是椭圆的一部分:

import tkinter as tk

WINDOW_WIDTH, WINDOW_HEIGHT = 600, 300
OVAL_WIDTH, OVAL_HEIGHT = 576, 290

# (x0, y0, x1, y1) rectangle for oval
BOUNDS = ( \
    (WINDOW_WIDTH - OVAL_WIDTH) / 2, \
    (WINDOW_HEIGHT - OVAL_HEIGHT) / 2, \
    3*WINDOW_WIDTH/2 - OVAL_WIDTH/2, \
    3*WINDOW_HEIGHT/2 - OVAL_HEIGHT/2 \
)

root = tk.Tk()

canvas = tk.Canvas(root, width=WINDOW_WIDTH+20, height=WINDOW_HEIGHT+20)  # +20 for window "chrome"
canvas.pack()

rectangle = canvas.create_rectangle(*BOUNDS, outline="blue")  # just for illustration
oval = canvas.create_oval(*BOUNDS, outline="red")  # just for illustration
arc = canvas.create_arc(*BOUNDS, start=30, extent=120, style=tk.ARC, width=3)

root.after(3000, canvas.delete, rectangle)  # remove rectangle illustration
root.after(6000, canvas.delete, oval)  # remove oval illustration

root.mainloop()

使用Arc时,它会在底部创建一条线作为弧的轮廓-如何摆脱这种情况?

上面的style=tk.ARC可以解决这个问题-默认为扇形。

在此处输入图片说明

该弧的末端如何终止与您的插图不同。 据我所知, capstylecapstylejoinstyle选项不适用于弧。

您要使用create_arc方法。 它以style参数指定的三种不同样式之一创建弧。 这是tcl / tk官方文档描述style选项的方式:

如果type为pieslice (默认值),则弧的区域由椭圆的周长的一部分加上两个线段定义,其中一个在椭圆的中心与周长部分的两端之间。 如果类型是和弦,则弧的区域由椭圆形的周长的一部分加上连接周长部分的两个端点的单个线段定义。 如果类型是圆弧,则圆弧的区域仅由周边的一部分组成。 在最后一种情况下,将忽略fill选项。

这是这三种样式的示例:

import tkinter as tk

root = tk.Tk()
canvas = tk.Canvas(root, background="black")
canvas.pack(side="top", fill="both", expand=True)

canvas.create_arc(0, 20, 100, 120, outline="red", style="pieslice")
canvas.create_arc(80, 20, 180, 120, outline="red", style="chord")
canvas.create_arc(160, 20, 260, 120, outline="red", style="arc")
root.mainloop()

截图

我认为这就是您要寻找的。

import tkinter as tk

root = tk.Tk()

canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()

coord = 10, 50, 240, 210
arc = canvas.create_arc(coord, start=30, extent=120, style=tk.ARC, width=3)

root.mainloop()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM