我该如何将此函数转换为类?

时间:2019-05-09 15:58:14

标签: python class zelle-graphics

我想将这段代码转换成一个类,在其中我可以使用相同的类制作其他矩形,而只是在周围进行切换。

def appBox(win1):
    appBox=Rectangle(Point(4,15), Point(11,13))
    appBox.setOutline("darkorange2")
    appBox.setFill("white")
    appLabel=Text(Point(7.5,14),"Beats By Cuse")
    appLabel.setSize(35)
    appLabel.setFace("courier")
    appLabel.setStyle("bold italic")
    appLabel.setFill("darkorange2")
    appBox.draw(win1)
    appLabel.draw(win1)
    return appBox, appLabel

2 个答案:

答案 0 :(得分:0)

您不是在问如何将参数传递给此函数,以便可以动态更改输出吗?

def function(arg1=1.0,arg2=1.0,arg3=1.0):
    return arg1 * arg2 * arg3

答案 1 :(得分:0)

这是将其变成一类的粗略示例,让您可以抽出很多这些带框的文本。在这种情况下,新的AppBox Rectangle的子类,它包含一个Label

from graphics import *

class AppBox(Rectangle):
    def __init__(self, p1, p2, text):
        super().__init__(p1, p2)

        self.text = text
        self.setOutline("darkorange2")
        self.setFill("white")

        midpoint = Point((p1.getX() + p2.getX()) / 2, (p1.getY() + p2.getY()) / 2)

        self.label = Text(midpoint, self.text)
        self.label.setSize(18)
        self.label.setFace("courier")
        self.label.setStyle("bold italic")
        self.label.setFill("darkorange2")

    def draw(self, graphwin):
        super().draw(graphwin)
        self.label.draw(graphwin)

beats = AppBox(Point(15, 15), Point(185, 35), "Beats By Cuse")

jeans = AppBox(Point(200, 60), Point(365, 80), "Jeans By Levi")

win = GraphWin(width=450, height=225)

beats.draw(win)
jeans.draw(win)

win.getMouse()
win.close()

更好的实现方式可能是只向AppBox构造函数提供一个(中心)点,并让其根据文本长度,字体大小等来计算矩形点。

enter image description here