python - 我如何将这个函数变成一个类?
问题描述
我想把这段代码变成一个类,我可以使用同一个类制作其他矩形,但只是切换东西。
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
解决方案
这是一个粗略的例子,将它变成一个类,让你抽出很多这样的盒装文本。在这种情况下,新AppBox
类是Rectangle
包含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
构造函数提供一个(中心)点,并让它根据文本长度、字体大小等计算矩形点。
推荐阅读
- swift - 使用 Swift 的 Microsoft 认知语音连续识别
- python - 如何修复“需要创建卖家账户”eBay API?
- typeahead.js - 预先输入的建议列表没有减少
- typescript - 可以更漂亮地用 let 替换 var
- python - 如何向用户显示省略号
- c++ - 为 Eigen::Map 指定 Eigen 使用的默认对齐方式以避免性能下降
- mysql - 需要使用 Laravel 将购物车详细信息插入 Mysql 数据库
- ms-access - 强制模态 MS-Access 表单显示为选项卡
- php - 无法在服务器上使用 php 上传文件,出现错误 7
- razor - Params are being sent again after EventCallback is triggered/invoked