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

Python實現(xiàn)畫圖軟件功能方法詳解

 更新時間:2020年07月28日 17:31:20   作者:Alan.hsiang  
這篇文章主要介紹了 Python實現(xiàn)畫圖軟件功能方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

概述

雖然Python的強項在人工智能,數(shù)據(jù)處理方面,但是對于日常簡單的應(yīng)用,Python也提供了非常友好的支持(如:Tkinter),本文主要一個簡單的畫圖小軟件,簡述Python在GUI(圖形用戶界面)方面的應(yīng)用,僅供學(xué)習(xí)分享使用,如有不足之處,還請指正。

設(shè)計思路

  • 頁面布局:主要分為上下兩部分 a. 繪圖區(qū)域,本例以Canvas實現(xiàn) b. 下部:功能區(qū),由按鈕實現(xiàn)
  • 事件監(jiān)聽:通過給功能按鈕綁定事件,來實現(xiàn)不同的功能,如:繪線,繪矩形等功能。
  • 繪圖區(qū)域:監(jiān)聽鼠標(biāo)左鍵的按下(開始繪圖)和抬起(停止繪圖),再根據(jù)不同的按鈕實現(xiàn)繪制不同的圖形。

涉及知識點

開發(fā)工具:Python3.7 , PyCharm2019

Tkinter 是 Python 的標(biāo)準(zhǔn) GUI 庫。Python 使用 Tkinter 可以快速的創(chuàng)建 GUI 應(yīng)用程序。

Canvas控件提供了一個自定義的繪圖區(qū)域,可以通過不同的函數(shù)來繪制不同的圖形。
繪制直線 create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)
繪制帶箭頭的直線 create_line(self.x, self.y, event.x, event.y, arrow=LAST, fill=self.fgcolor)
繪制矩形 create_rectangle(self.x, self.y, event.x, event.y, outline=self.fgcolor)
繪制曲線,是通過繪制不同的點來實現(xiàn)的
清除圖形 drawpad.delete('all')

Button 按鈕控件,通過綁定(bind)不同的監(jiān)聽事件來實現(xiàn)不同的功能。
name屬性設(shè)置按鈕的名稱,
text屬性設(shè)置按鈕的顯示文本。
bind 綁定事件

示例效果圖

本例主要實現(xiàn)繪制直線,帶箭頭的直線,曲線,矩形,清除等功能,如下所示:

核心代碼

在本例中,主要功能如下:

創(chuàng)建畫板

 """創(chuàng)建畫圖區(qū)域"""
 self.drawpad = Canvas(self, width=win_width, height=win_height, bg=bgcolor)
 self.drawpad.pack()

創(chuàng)建按鈕

# 創(chuàng)建按鈕
  self.btn_start = Button(self, name='start', text='開始')
  self.btn_start.pack(side='left', padx=10)
  self.btn_pen = Button(self, name='pen', text='畫筆')
  self.btn_pen.pack(side='left', padx=10)
  self.btn_rect = Button(self, name='rect', text='矩形')
  self.btn_rect.pack(side='left', padx=10)
  self.btn_clear = Button(self, name='clear', text='清屏')
  self.btn_clear.pack(side='left', padx=10)
  self.btn_erasor = Button(self, name='erasor', text='橡皮擦')
  self.btn_erasor.pack(side='left', padx=10)
  self.btn_line = Button(self, name='line', text='直線')
  self.btn_line.pack(side='left', padx=10)
  self.btn_line_arrow = Button(self, name='line_arrow', text='箭頭直線')
  self.btn_line_arrow.pack(side='left', padx=10)
  self.btn_color = Button(self, name='color', text='顏色')
  self.btn_color.pack(side='left', padx=10)

 綁定事件

# 綁定事件
  self.btn_line.bind('<Button-1>', self.eventManager) # 點擊按鈕事件
  self.btn_line_arrow.bind('<Button-1>', self.eventManager) # 點擊按鈕事件
  self.btn_rect.bind('<Button-1>', self.eventManager) # 點擊按鈕事件
  self.btn_pen.bind('<Button-1>', self.eventManager) # 點擊按鈕事件
  self.btn_erasor.bind('<Button-1>', self.eventManager) # 點擊按鈕事件
  self.btn_clear.bind('<Button-1>', self.eventManager) # 點擊按鈕事件
  self.btn_color.bind('<Button-1>', self.eventManager) # 點擊按鈕事件

功能實現(xiàn)

def eventManager(self, event):
  name = event.widget.winfo_name()
  print(name)
  self.start_flag = True
  if name == 'line':
   # 左鍵拖動
   self.drawpad.bind('<B1-Motion>', self.myline)
  elif name == 'line_arrow':
   self.drawpad.bind('<B1-Motion>', self.myline_arrow)
  elif name == 'rect':
   self.drawpad.bind('<B1-Motion>', self.myrect)
  elif name == 'pen':
   self.drawpad.bind('<B1-Motion>', self.mypen)
  elif name == 'erasor':
   self.drawpad.bind('<B1-Motion>', self.myerasor)
  elif name == 'clear':
   self.drawpad.delete('all')
  elif name == 'color':
   c = askcolor(color=self.fgcolor, title='請選擇顏色')
   print(c) # c的值 ((128.5, 255.99609375, 0.0), '#80ff00')
   self.fgcolor = c[1]

 def startDraw(self, event):
  self.drawpad.delete(self.lastdraw)
  if self.start_flag:
   self.start_flag = False
   self.x = event.x
   self.y = event.y

 def stopDraw(self, event):
  self.start_flag = True
  self.lastdraw = 0

 def myline(self, event):
  self.startDraw(event)
  self.lastdraw = self.drawpad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)

 def myline_arrow(self, event):
  self.startDraw(event)
  self.lastdraw = self.drawpad.create_line(self.x, self.y, event.x, event.y, arrow=LAST, fill=self.fgcolor)

 def myrect(self, event):
  self.startDraw(event)
  self.lastdraw = self.drawpad.create_rectangle(self.x, self.y, event.x, event.y, outline=self.fgcolor)

 def mypen(self, event):
  self.startDraw(event)
  print('self.x=', self.x, ',self.y=', self.y)
  self.drawpad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)
  self.x = event.x
  self.y = event.y

 def myerasor(self, event):
  self.startDraw(event)
  print('self.x=', self.x, ',self.y=', self.y)
  self.drawpad.create_rectangle(event.x - 3, event.y - 3, event.x + 3, event.y + 3, fill=bgcolor)
  self.x = event.x
  self.y = event.y

快捷鍵的實現(xiàn)

 self.master.bind('<KeyPress-r>', self.hotKey) # 綁定快捷鍵
self.master.bind('<KeyPress-g>', self.hotKey) # 綁定快捷鍵
 self.master.bind('<KeyPress-b>', self.hotKey) # 綁定快捷鍵
 self.master.bind('<KeyPress-y>', self.hotKey) # 綁定快捷鍵
 self.drawpad.bind('<ButtonRelease-1>', self.stopDraw) # 左鍵釋放按鈕

快捷鍵功能實現(xiàn)

def hotKey(self, event):
  c = event.char
  if c == 'r':
   self.fgcolor = 'red'
  elif c == 'g':
   self.fgcolor = 'green'
  elif c == 'b':
   self.fgcolor = 'blue'
  elif c == 'y':
   self.fgcolor = 'yellow'

有需要的朋友,可點擊鏈接下載整體代碼,如下所示:

源碼鏈接

 備注

不積跬步,無以至千里;不積小流,無以成江海;鍥而舍之,朽木不折,鍥而不舍,金石可鏤。

到此這篇關(guān)于 Python實現(xiàn)畫圖軟件功能方法詳解的文章就介紹到這了,更多相關(guān) Python實現(xiàn)畫圖軟件功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

安徽省| 民乐县| 二连浩特市| 宜君县| 普陀区| 灵武市| 讷河市| 宿州市| 独山县| 榆林市| 综艺| 汝阳县| 吉隆县| 旌德县| 大丰市| 乐至县| 杨浦区| 科技| 依安县| 平凉市| 烟台市| 上高县| 郯城县| 横峰县| 民和| 囊谦县| 沙湾县| 磐安县| 江口县| 陵川县| 靖州| 靖安县| 汉阴县| 潜江市| 博兴县| 沁水县| 潍坊市| 田阳县| 兰溪市| 伊川县| 云阳县|