人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

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

發(fā)布日期:2021-12-29 13:13 | 文章來源:源碼中國

一步步教你怎么用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)# 調(diào)用基類構造: 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()  # 調(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()
 

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

版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。

相關文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務

7x24全年不間斷在線

專屬顧問服務

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務熱線

關注
微信

關注官方微信
頂部