【发布时间】:2020-11-10 11:54:20
【问题描述】:
我是 tkinter 的新手,我最近了解了 canvas 小部件。在掌握了基础知识之后,我认为我可以使用画布制作一个自定义进度条,并且成功了!真的很棒,然而,在去除形状上的轮廓后,我看到形状的边缘非常粗糙,尤其是椭圆形。我做了一些搜索,发现您只能将 smooth 关键字参数用于多边形。所以我的问题是,有没有办法在 tkinter 中平滑形状的边缘,尤其是椭圆形的边缘,有点像 anti-aliasing?我的代码:
from tkinter import *
root = Tk()
root.geometry("500x500")
percent = 0
progress_done, new_oval = None, None
canvas = Canvas(root, width=400, height=400, bg="white")
canvas.pack(pady=10)
prg_bar = canvas.create_rectangle(50, 140, 350, 160, fill="grey", outline="")
oval_one = canvas.create_oval(40, 140, 60, 160, fill="grey", outline="", )
oval_two = canvas.create_oval(340, 140, 360, 160, fill="grey", outline="")
def add_up():
global percent, progress_done, new_oval
if percent < 100:
percent += 20
if progress_done is None and new_oval is None:
canvas.create_oval(40, 140, 60, 160, fill="light blue", outline='')
canvas.delete(oval_one)
progress_done = canvas.create_rectangle(50, 140, (percent * 3) + 50, 160, fill="light blue", outline="")
new_oval = canvas.create_oval((percent * 3) + 40, 140, (percent * 3) + 60, 160, fill="light blue",
outline="")
else:
canvas.delete(progress_done)
canvas.delete(new_oval)
progress_done = canvas.create_rectangle(50, 140, (percent * 3) + 50, 160, fill="light blue", outline="")
new_oval = canvas.create_oval((percent * 3) + 40, 140, (percent * 3) + 60, 160, fill="light blue",
outline="")
if percent == 100:
canvas.delete(oval_two)
btn = Button(root, text="Add to prg", command=add_up)
btn.pack()
root.mainloop()
【问题讨论】:
-
简答,不。
-
用多边形画椭圆。
-
@Michael Guidry,我试过了。整个画布形状都是低分辨率的。
标签: python tkinter tkinter-canvas antialiasing