为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对象):
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)