最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python畫圖小案例之小雪人超詳細源碼注釋

 更新時間:2021年09月30日 09:54:03   作者:zhulin1028  
在看了很多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:角度值,帶默認參數(shù)
        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)          # 臉:帶參數(shù)的實例
        self.eye0 = Sense(self.cvns, eye0_points, fill='blue')              # 眼1:帶參數(shù)的實例
        self.eye1 = Sense(self.cvns, eye1_points, self.fill)              # 眼2:帶參數(shù)的實例
        self.mouth = Sense(self.cvns, self.mouth_cacu(), (-10, -170))  # 口:帶參數(shù)的實例
 
    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                   # 身高/鈕扣數(shù)+1
        points = []                         # 列表
        for i in range(5):                 # 鈕扣的個數(shù)
            points.append(self.move_dy(b0_points, i * size))   # 各鈕扣的移動數(shù)據(jù)存入列表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()
 

到此這篇關于Python畫圖小案例之小雪人超詳細源碼注釋的文章就介紹到這了,更多相關Python 雪人 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Pytorch BertModel的使用說明

    Pytorch BertModel的使用說明

    這篇文章主要介紹了Pytorch BertModel的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 基于Python制作IP查詢網站

    基于Python制作IP查詢網站

    這篇文章主要為大家詳細介紹了如何使用python快速做一個簡易查內網IP網站,通過電腦訪問網站就知道自己的IP地址,感興趣的小伙伴可以了解下
    2024-10-10
  • django與小程序實現(xiàn)登錄驗證功能的示例代碼

    django與小程序實現(xiàn)登錄驗證功能的示例代碼

    這篇文章主要介紹了django與小程序實現(xiàn)登錄驗證功能的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-02-02
  • Python用字典統(tǒng)計CSV數(shù)據(jù)的實現(xiàn)示例

    Python用字典統(tǒng)計CSV數(shù)據(jù)的實現(xiàn)示例

    python提供了許多處理CSV文件的工具,其中字典是一個非常高效的數(shù)據(jù)結構,本文主要介紹了Python用字典統(tǒng)計CSV數(shù)據(jù)的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • Keras—embedding嵌入層的用法詳解

    Keras—embedding嵌入層的用法詳解

    這篇文章主要介紹了Keras—embedding嵌入層的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 在cmder下安裝ipython以及環(huán)境的搭建

    在cmder下安裝ipython以及環(huán)境的搭建

    今天小編就為大家分享一篇關于在cmder下安裝ipython以及環(huán)境的搭建,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • pandas DataFrame.to_sql()用法小結

    pandas DataFrame.to_sql()用法小結

    Pandas是基于NumPy的一種工具,該工具是為了解決數(shù)據(jù)分析任務而創(chuàng)建的,本文主要介紹了pandas DataFrame.to_sql()用法小結,感興趣的可以了解一下
    2024-02-02
  • python print 按逗號或空格分隔的方法

    python print 按逗號或空格分隔的方法

    下面小編就為大家分享一篇python print 按逗號或空格分隔的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python列表list排列組合操作示例

    Python列表list排列組合操作示例

    這篇文章主要介紹了Python列表list排列組合操作,涉及Python排列組合數(shù)值運算相關操作技巧,需要的朋友可以參考下
    2018-12-12
  • 關于python中inspect模塊用法詳解

    關于python中inspect模塊用法詳解

    這篇文章主要介紹了關于python中inspect模塊用法詳解,獲取函數(shù)簽名對象。函數(shù)簽名包含了一個函數(shù)的信息,包括函數(shù)名、它的參數(shù)類型、它所在的類和名稱空間及其他信息,需要的朋友可以參考下
    2023-07-07

最新評論

中西区| 左权县| 廉江市| 鄂温| 彭州市| 吉首市| 大冶市| 个旧市| 青田县| 建德市| 馆陶县| 喜德县| 探索| 武川县| 莱西市| 昌都县| 海门市| 太原市| 金山区| 宣城市| 化隆| 娱乐| 托克托县| 禹州市| 清水县| 南和县| 延安市| 德保县| 新田县| 芮城县| 大新县| 马公市| 嵊州市| 图片| 遂川县| 安平县| 佛冈县| 漯河市| 白朗县| 桂平市| 永登县|