python画图代码大全画雪人,用python画雪人编程代码

大家好,小编为大家解答python画图代码大全画雪人的问题。很多人还不知道用python画雪人编程代码,现在让我们一起来看看吧!

一步步教你怎么用Python画雪人,进一步熟悉Python的基础画图操作,废话不多说,上代码。

希望您给个关注给个赞,也算对我们的支持了python简单代码画爱心



class Shape:     # 基类(雪人各部件(形状)共有的属性)
    def __init__(self, cvns, points, fill):     # 构造方法  画布  位置坐标  颜色
         self.cvns = cvns                 # 画布
         self.points = points             # 坐标(x1, y1, x2, y2)
         self.fill = fill
         self.pid = None                  # 当前图形的id

    def delete(self):         # 删除图形
         if self.pid:
             self.cvns.delete(self.pid)


class ShapeAngles(Shape):     # 继承基类(增加了角度))
    def __init__(self, cvns, points, fill, angles=(10, 170)):        # angles:角度值,带默认参数
        super(ShapeAngles, self).__init__(cvns, points, fill)   # 调用基类构造: cvns,points,fill
        self.angles = {'start':angles[0], 'extent':angles[1]}  # 构造自己的属性:angles


class HatTop(Shape):      # 帽子顶部
    
    def draw(self):
#        self.pid = self.cvns.create_oval(self.points, fill='white')       # 椭圆形
        self.pid = self.cvns.create_oval(self.points, fill=self.fill)       # 椭圆形


class HatBottom(Shape):    # 帽子底部
    
    def draw(self):
        self.pid = self.cvns.create_polygon(self.points)     # 绘多边形的方法


class Hat:         # 帽子整体(组合顶部和底部)
    def __init__(self, cvns, start_point, fill, w, h):    # w,h是帽子的宽、高
        self.cvns = cvns                            # 初始化
        self.start_point = start_point
        self.w = w
        self.fill = fill
        self.h = h
        self.ht = HatTop(self.cvns, self.ht_cacu(), fill=self.fill)        # 实例化顶部
        self.hb = HatBottom(self.cvns, self.hb_cacu(), self.fill)         # 实例化底部
        
    def draw(self):                # 绘制
        self.ht.draw()              # 调用顶部方法绘制
        self.hb.draw()              # 调用底部方法绘制

    def delete(self):
       self.ht.delete()
       # self.hb.delete()

    def ht_cacu(self):             # 计算顶部坐标
        r = self.h / 3 / 2
        x1 = self.start_point[0] + self.w / 2 - r
        y1 = self.start_point[1] + 20 - r
        x2 = x1 + 2 * r
        y2 = y1 + 2 * r
        return x1, y1, x2, y2

    def hb_cacu(self):              # 计算底部坐标(三角形的三个点的坐标)
        x1 = self.start_point[0] + self.w / 2
        y1 = self.start_point[1] + self.h / 3
        x2 = self.start_point[0] + self.w / 3
        y2 = self.start_point[1] + self.h + 13
        x3 = self.start_point[0] + self.w / 3 * 2
        y3 = y2
        return x1, y1, x2, y2, x3, y3


class Sense(ShapeAngles):                # 五官(眼、口扇形图形)
    def draw(self):
        self.pid = self.cvns.create_arc(*self.points, **self.angles, fill='red')    # 绘制弧线

class Face(HatTop):   # 脸
    pass


class Head:         # 头部
    def __init__(self, cvns, start_point, fill, w, h):    # 此处的w,h是头的
        self.cvns = cvns
        self.start_point = start_point
        self.fill = fill
        self.w = w
        self.h = h
        eye0_points = self.eye0_cacu()     # 眼睛1坐标
        dx = self.h / 3 + self.h / 9
        eye1_points = (eye0_points[0] + dx, eye0_points[1],    # 眼睛2坐标
                       eye0_points[2] + dx, eye0_points[3])
        self.face = Face(self.cvns, self.face_cacu(), self.fill)          # 脸:带参数的实例
        self.eye0 = Sense(self.cvns, eye0_points, fill='blue')              # 眼1:带参数的实例
        self.eye1 = Sense(self.cvns, eye1_points, self.fill)              # 眼2:带参数的实例
        self.mouth = Sense(self.cvns, self.mouth_cacu(), (-10, -170))  # 口:带参数的实例

    def draw(self):
        # 绘制脸部各部位
        self.face.draw()
        self.eye0.draw()
        self.eye1.draw()
        self.mouth.draw()

    def face_cacu(self):             # 脸坐标计算
        x1 = self.start_point[0] + (self.w - self.h) / 2
        y1 = self.start_point[1]
        x2 = x1 + self.h
        y2 = y1 + self.h
        return x1, y1, x2, y2

    def eye0_cacu(self):              # 眼0坐标计算
        left_point = (self.start_point[0] + (self.w - self.h) / 2 - 5, self.start_point[1])
        x1 = left_point[0] + self.h / 6
        y1 = left_point[1] + self.h / 3
        x2 = x1 + self.h / 3
        y2 = left_point[1] + self.h / 2
        return x1, y1, x2, y2

    def mouth_cacu(self):            # 口坐标计算
        left_point = (self.start_point[0] + (self.w - self.h) / 2, self.start_point[1])
        x1 = left_point[0] + self.h / 3
        y1 = left_point[1] + 2 * self.h / 3 + 25      # +25后口的位置靠下,并且图形更大了
        x2 = x1 + self.h / 3
        y2 = left_point[1] + self.h / 2
        return x1, y1, x2, y2


class hand(HatTop):            # 手
    pass


class BodyOutline(HatTop):      # 身体轮廓,因没有特别的形状,继承了基类,类体为空
    pass


class Button(HatTop):            # 钮扣
    pass

class Body:                      # 身体

    def __init__(self, cvns, start_point, fill, w, h):
        self.cvns = cvns
        self.start_point = start_point
        self.w = w
        self.h = h
        self.fill = fill
        self._button_size = 10        # 钮扣的大小
        self.buttons = []
        self.bo = BodyOutline(self.cvns, self.body_cacu(), self.fill)      # 身体轮廓实例
#        self.hd = hand(self.cvns, (15, 500, 45, 240), self.fill)           # 左手轮廓实例,坐标为矩形的两个对角顶点的坐标为准画的圆/椭圆
        self.hd = hand(self.cvns, self.bd_cacu(0), self.fill)           # 左手轮廓实例,坐标为矩形的两个对角顶点的坐标为准画的圆/椭圆
        self.hd2 = hand(self.cvns, self.bd_cacu(self.w), self.fill)  # 右手
        for pnts in self.all_button_points():
            self.buttons.append(Button(self.cvns, pnts, self.fill))

    def bd_cacu(self, w):  # 计算手的坐标
        x1 = 15 + w
        y1 = self.start_point[1] + self.h / 2
        x2 = x1 + 30
        y2 = y1 - 26 * self._button_size
        return x1, y1, x2, y2

    def draw(self):
        self.bo.draw()                # 身体绘制
        self.hd.draw()                # 手1绘制
        self.hd2.draw()               # 手2绘制
        for bttn in self.buttons:    # 各钮扣绘制
            bttn.draw()

    def body_cacu(self):           # 计算身体轮廓坐标
        x1, y1 = self.start_point
        x2 = x1 + self.w
        y2 = y1 + self.h
        return x1, y1, x2, y2

    def button0_cacu(self):        # 计算第0个钮扣的坐标
        x1 = self.start_point[0] + self.w / 2 - self._button_size
        y1 = self.start_point[1] + self.h / 5 - self._button_size
        x2 = x1 + 2 * self._button_size         # 2决定钮扣的园形形状
        y2 = y1 + 2 * self._button_size
        return x1, y1, x2, y2

    def move_dy(self, points, size):   # 钮扣移动的方法
        y1 = points[1] + size
        y2 = points[3] + size
        return points[0], y1, points[2], y2

    def all_button_points(self):          # 绘制每个钮扣的坐标
        b0_points = self.button0_cacu()
        size = self.h / 6                   # 身高/钮扣数+1
        points = []                         # 列表
        for i in range(5):                 # 钮扣的个数
            points.append(self.move_dy(b0_points, i * size))   # 各钮扣的移动数据存入列表points
        return points                   # 返回列表值

    # def set_button_size(self, size):
    #     self._button_size = size


class Snow:           # 组装成雪人

    def __init__(self, cvns, points, fill, w=150, h=450):       # points为雪人的坐标其与帽子坐标一致(见雪人图)
        self.cvns = cvns
        self.points = points
        self.w = w
        self.h = h
        self.fill = fill
        self.head = Head(self.cvns, (self.points[0], self.points[1] + self.h / 6), self.fill, self.w, self.h / 3)   # 实例化头部
        self.body = Body(self.cvns, (self.points[0], self.points[1] + self.h / 2), self.fill, self.w, self.h / 2)   # 实例化身体
        self.fill = 'red'                                                            # 帽子顶部颜色
        self.hat = Hat(self.cvns, self.points, self.fill, self.w, self.h / 6)        # 绘帽子                             # 实例化帽子

    def draw(self):
        self.hat.draw()         # 绘制帽子
        self.head.draw()        # 绘制头
        self.body.draw()        # 绘制身体

if __name__ == '__main__':
    import tkinter
    root = tkinter.Tk()         # 建立根窗口
    cvns = tkinter.Canvas(root, width=400, height=700, bg='white')   # 调用画布
    cvns.pack()                 # 将画布添加到窗口
    snow = Snow(cvns, (30, 15), 'white', 320, 660)   # 雪人的实例化(传入画布对象、起始坐标、宽、高)
    snow = snow.draw()          # 绘制
    root.mainloop()

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python是一种高级编程语言,拥有丰富的图形库,可以完成绘制各种类型的图形任务。Python画图代码大全如下: 1. matplotlib.pyplot:这是Python中最常用的绘图库,支持2D和3D图形,提供了各种图形类型的绘制函数,如line、scatter、bar、histogram等,同时也可以通过一些参数调整来修改图像的颜色、形状等。 2. seaborn:这是面向数据分析的Python可视化库,适用于各种数据类型的可视化,提供了一些专门的绘图功能,比如热图、小提琴图、蜂窝图等。 3. bokeh:这是一个交互式的可视化库,可以支持大规模数据可视化,并且能够生成交互式的Web应用程序,具有高度的定制性和美观性。 4. plotly:这是一个JavaScript可视化库,支持Python、R、Excel等几乎所有主流编程语言,具有高度的互动性和动态性,可以绘制各种类型的图形,包括散点图、条形图、热图、气泡图等。 5. ggplot:这是基于R语言的ggplot2库的Python实现,提供了各种复杂图形的绘制功能,例如分面绘图、概率密度绘图等。 上述Python画图库各有特色,在选择使用的时候可以考虑自己的需求和技术水平。不同的图形库使用起来也略有不同,可以通过相应的文档、教程和示例代码进行学习和练习。 ### 回答2: Python是一种非常适合绘制各种类型图形的编程语言,有着丰富的绘图库和工具。在本文中,我们将为大家介绍一些常用的Python绘图功能和相应的代码示例。 1. Matplotlib Matplotlib是Python最受欢迎的绘图库之一,支持多种图形类型,包括折线图、散点图、饼图、直方图、热图等等。以下是一些常见的示例代码: 折线图: import matplotlib.pyplot as plt x = [1,2,3] y = [2,4,6] plt.plot(x, y) plt.show() 散点图: import matplotlib.pyplot as plt x = [1,2,3] y = [2,4,6] plt.scatter(x, y) plt.show() 饼图: import matplotlib.pyplot as plt labels = ['Apple', 'Orange', 'Banana'] sizes = [30, 40, 30] plt.pie(sizes, labels=labels) plt.show() 2. Seaborn Seaborn是另一个流行的Python绘图库,它可以帮助我们更加容易地创建各种类型的统计图形。以下是一些示例代码: 折线图: import seaborn as sns x = [1,2,3] y = [2,4,6] data = {'x': x, 'y': y} sns.lineplot(data=data, x='x', y='y') plt.show() 散点图: import seaborn as sns x = [1,2,3] y = [2,4,6] data = {'x': x, 'y': y} sns.scatterplot(data=data, x='x', y='y') plt.show() 直方图: import seaborn as sns data = [1,2,2,3,4,4,4,5] sns.histplot(data=data) plt.show() 3. Plotly Plotly是一个交互式的绘图库,可以轻松创建可交互的图形和可视化工具。它支持各种图形类型,例如线图、散点图、面积图、热图等等。以下是一些代码示例: 折线图: import plotly.graph_objs as go x = [1,2,3] y = [2,4,6] fig = go.Figure(data=go.Scatter(x=x, y=y)) fig.show() 散点图: import plotly.graph_objs as go x = [1,2,3] y = [2,4,6] fig = go.Figure(data=go.Scatter(x=x, y=y, mode='markers')) fig.show() 面积图: import plotly.graph_objs as go x = [1,2,3] y = [2,4,6] fig = go.Figure(data=go.Scatter(x=x, y=y, fill='tozeroy')) fig.show() 以上是一些常见的Python绘图示例和代码,希望对大家有所帮助。当然,还有很多其他的绘图库和工具可以使用,例如Bokeh、ggplot等等,请根据具体需求进行选择。 ### 回答3: Python是一种高度灵活且易于学习的编程语言,可以用于许多不同的应用程序,包括绘图。Python中许多优秀的绘图工具和库可以让用户轻松绘制各种类型的图形,例如篡改数据、描绘趋势和分析结果等。 下面列出一些常用的Python绘图库: 1. Matplotlib Matplotlib是Python最常用的绘图库之一。它可以用于制作静态、交互式和动画图形。Matplotlib提供了大量的图形类型,并且针对大多数情况都提供了详细的自定义选项。此外,Matplotlib的文档十分详尽,有很多实例代码和可用于学习的教程。 2. Seaborn Seaborn是一种基于Matplotlib的Python图形库,专门用于创建各种类型的统计图形。Seaborn提供了许多功能,例如多变量处理、热力图和时间序列绘图等。对于数据科学家来说,Seaborn是创建详细、高质量的图形的最佳选择之一。 3. Plotly Plotly是一种Python图形库,用于创建交互式绘图,可以在Jupyter Notebook、Dash应用程序和Web浏览器中使用。它的优点在于可以轻松将图形嵌入网页中,与其他Python可视化工具相比,用户可以使用更多的可视化选项。 4. Bokeh Bokeh是一种用于制作交互式、高级数据可视化的Python库。它可以在Web浏览器中运行,并且可以与其他Python库如NumPy和Pandas无缝连接。Bokeh的主要优点是它可以用于大量数据,这使得它成为处理大型数据集的最佳选择。 总之,Python有许多绘图库供用户使用,可以帮助用户创建各种类型的图形。无论是针对数据分析还是纯艺术创作,Python都提供了丰富的工具和库来帮助绘制各种类型的图形。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值