首页 > 解决方案 > 我如何将这个函数变成一个类?

问题描述

我想把这段代码变成一个类,我可以使用同一个类制作其他矩形,但只是切换东西。

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

标签: pythonclasszelle-graphics

解决方案


这是一个粗略的例子,将它变成一个类,让你抽出很多这样的盒装文本。在这种情况下,新AppBoxRectangle包含a子类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构造函数提供一个(中心)点,并让它根据文本长度、字体大小等计算矩形点。

在此处输入图像描述


推荐阅读