国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

香港云服务器
服務(wù)器之家 - 腳本之家 - Python - Python畫圖小案例之小雪人超詳細源碼注釋

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

2022-01-17 10:32zhulin1028 Python

在看了很多Python教程之后,覺得是時候做點什么小項目來練練手了,于是想來想去,用python寫了一個小雪人,代碼注釋無比詳細清楚,快來看看吧

一步步教你怎么用Python畫雪人,進一步熟悉Python的基礎(chǔ)畫圖操作,廢話不多說,上代碼。

希望您給個關(guān)注給個贊,也算對我們的支持了。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
class Shape:     # 基類(雪人各部件(形狀)共有的屬性)
    def __init__(self, cvns, points, fill):     # 構(gòu)造方法  畫布  位置坐標  顏色
         self.cvns = cvns                 # 畫布
         self.points = points             # 坐標(x1, y1, x2, y2)
         self.fill = fill
         self.pid = None                  # 當(dāng)前圖形的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)   # 調(diào)用基類構(gòu)造: cvns,points,fill
        self.angles = {'start':angles[0], 'extent':angles[1]}  # 構(gòu)造自己的屬性: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()              # 調(diào)用頂部方法繪制
        self.hb.draw()              # 調(diào)用底部方法繪制
 
    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')   # 調(diào)用畫布
    cvns.pack()                 # 將畫布添加到窗口
    snow = Snow(cvns, (30, 15), 'white', 320, 660)   # 雪人的實例化(傳入畫布對象、起始坐標、寬、高)
    snow = snow.draw()          # 繪制
    root.mainloop()

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

原文鏈接:https://blog.csdn.net/xiejiachao/article/details/120536554

延伸 · 閱讀

精彩推薦
1255
主站蜘蛛池模板: 中文成人在线 | 日韩欧美精品在线 | 免费黄色成人 | 欧美成人高清视频 | 欧美片网站免费 | 在线观看亚洲 | 日日色视频 | 国内精品视频一区二区三区八戒 | 久久美女视频 | 欧美中文字幕一区二区三区 | 怡红院成人影院 | 亚洲精品久久久久久久久久久久久 | 人人干在线 | 国产精品久久国产精品 | 亚洲视频播放 | 国产精品久久久久久久久久久久久久 | 久久久一区二区三区 | 亚洲精品系列 | 亚洲精品福利在线观看 | 国产一区二区视频精品 | 久久久久综合精品福利啪啪 | 一级黄色国产片 | 天堂av2020 | 五月天婷婷免费视频 | 欧美精品免费在线 | 在线色av| 龙珠z国语291集普通话 | 免费在线成人网 | 宅男lu666噜噜噜在线观看 | 亚洲高清毛片一区二区 | 亚洲视频一区在线观看 | 国产精品一区二区无线 | 精品国产91乱码一区二区三区 | 欧美久久久 | 久久精品国产精品青草 | 黄色一级在线观看 | 亚洲欧美日韩精品久久亚洲区 | 激情六月婷 | 国产精品美女久久久久久不卡 | 日韩欧美一区二区三区免费观看 | 中文字幕av一区二区三区 |