有没有办法减少canvas.create_rectangle方法在我的代码中出现的次数?(DRY原则)



所以我创建了一个Tkinter应用程序,有3个框架。用户界面是用Figma设计的,因此对象是显式调用的。

通过创建一个从canvas继承的顶级类,我设法减少了canvas对象被显式调用的情况。

class MyCanvas (Canvas):
def __init__(self, *args, **kwargs):
Canvas.__init__(self, *args, **kwargs)
self['bg'] = "#FFFFFF",
self['height'] = 519,
self['width'] = 862,
self['bd'] = 0,
self['highlightthickness'] = 0,
self['relief'] = "ridge"
self.place(x=0,y=0)

这是其中一个框架:

class HomePage (tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
canvas = MyCanvas(self)

现在,这之后的代码是:

canvas.create_rectangle(
0.0,
0.0,
587.0,
519.0,
fill="#00A4D2",
outline="")

这个代码块出现了三次(我有三帧(。有没有办法减少这种情况的重复?

我尝试过的不同方法:

  1. @classmethod
@classmethod
def Createrect(cls):
self.create_rectangle(0.0,
0.0,
587.0,
519.0,
fill="#00A4D2",
outline="")

然后在之后调用该方法

canvas = MyCanvas(self)

没用。

  1. 创建另一个顶级类
class createrect(MyCanvas)
def createrect1():
MyCanvas.create_rectangle(.0,
0.0,
587.0,
519.0,
fill="#00A4D2",
outline="")

又是一次试错,显然没有成功。

谢谢你将来的帮助!

目前该应用程序正在运行,但它有600多条线路。最初是900(lol(,但由于我发现了继承概念,它减少到了600+。尽管如此,我相信它可以进一步减少。如果代码不健壮,我很抱歉,这是我的第一个Python应用程序。

我希望我提供了所有必要的细节。如果需要其他详细信息,请随时发表评论。

我不确定你是想得太多还是我想得太少:(

选项1:只需在MyCanvas中创建一个常规方法即可多次调用它。仅适用于当前画布。

class MyCanvas(Canvas):
def __init__(self, *args, **kwargs):
super().__init__(self, *args, **kwargs)
self['bg'] = "#FFFFFF",
self['height'] = 519,
self['width'] = 862,
self['bd'] = 0,
self['highlightthickness'] = 0,
self['relief'] = "ridge"
self.place(x=0, y=0)

self.create_rect()
self.create_rect()
self.create_rect()
def create_rect(self):
self.create_rectangle(0.0, 0.0, 587.0, 519.0, fill="#00A4D2", outline="")

选项2:拥有一个MainCanvas,其中包含可重复使用的方法

class MainCanvas(Canvas):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def create_rect(self):
self.create_rectangle(0.0, 0.0, 587.0, 519.0, fill="#00A4D2", outline="")

class MyCanvas(MainCanvas):
def __init__(self, *args, **kwargs):
super().__init__(self, *args, **kwargs)
self['bg'] = "#FFFFFF",
self['height'] = 519,
self['width'] = 862,
self['bd'] = 0,
self['highlightthickness'] = 0,
self['relief'] = "ridge"
self.place(x=0, y=0)
self.create_rect()
self.create_rect()
self.create_rect()

矩形项目应为以下形式之一:

pathName create rectangle x1 y1 x2 y2 ?option value ...?
pathName create rectangle coordList ?option value ...?

因此,创建一个矩形所需要的只是一个坐标列表或写出的位置参数。在这些坐标之后,您有各种可选的关键字参数。考虑到这一点,你可以很容易地做一些事情,比如:

coords = [x1,y1,x2,y2]
options= {
'fill':"#00A4D2", 
'outline':""}
[self.create_rectangle(*coords,**options) for i in range(4)]

这段代码使用了python特性打开和列表理解。还要注意,我没有使用self.,因为在我看来,这些变量似乎毫无意义,无法收集垃圾。

够短吗?

相关内容

  • 没有找到相关文章

最新更新