如何制作带有圆角的tkinter画布矩形?

如何制作带有圆角的tkinter画布矩形?,第1张

如何制作带有圆角的tkinter画布矩形

为tobias方法提供一种替代方法实际上是使用一个多边形来完成。

如果您担心优化,或者不必担心用于引用单个对象的标签系统,则这样做的好处是成为一个画布对象。

该代码稍长一些,但是非常基础,因为它只是利用了以下想法:在平滑多边形时,可以两次给出相同的坐标以“阻止”平滑发生。

这是可以做什么的一个示例:

from tkinter import *root = Tk()canvas = Canvas(root)canvas.pack()def round_rectangle(x1, y1, x2, y2, radius=25, **kwargs):    points = [x1+radius, y1,   x1+radius, y1,   x2-radius, y1,   x2-radius, y1,   x2, y1,   x2, y1+radius,   x2, y1+radius,   x2, y2-radius,   x2, y2-radius,   x2, y2,   x2-radius, y2,   x2-radius, y2,   x1+radius, y2,   x1+radius, y2,   x1, y2,   x1, y2-radius,   x1, y2-radius,   x1, y1+radius,   x1, y1+radius,   x1, y1]    return canvas.create_polygon(points, **kwargs, smooth=True)my_rectangle = round_rectangle(50, 50, 150, 100, radius=20, fill="blue")root.mainloop()

使用此功能,您只需提供要用于矩形的法线坐标,然后指定在圆角处变圆的“半径”即可。使用

**kwargs
表示您可以
fill="blue"
像通常使用
create_
方法那样传递关键字参数,例如。

尽管坐标看起来很复杂,但是它只是有条不紊地绕到“矩形”中的每个点,从而给每个非角点两次。

如果您不介意较长的代码行,则可以将所有坐标放在一行上,从而使函数只有2行(!)。看起来像:

def round_rectangle(x1, y1, x2, y2, r=25, **kwargs):        points = (x1+r, y1, x1+r, y1, x2-r, y1, x2-r, y1, x2, y1, x2, y1+r, x2, y1+r, x2, y2-r, x2, y2-r, x2, y2, x2-r, y2, x2-r, y2, x1+r, y2, x1+r, y2, x1, y2, x1, y2-r, x1, y2-r, x1, y1+r, x1, y1+r, x1, y1)    return canvas.create_polygon(points, **kwargs, smooth=True)

这将产生以下内容(请注意,这是一个canvas对象):



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5632278.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存