• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      用PythonTkinter模塊做簡易畫圖板

      2022-06-01 16:38:23
      電腦報 2022年20期
      關(guān)鍵詞:左鍵響應(yīng)函數(shù)畫布

      一、功能需求分析

      在開始寫代碼之前,先分析程序需要實現(xiàn)的功能。一個簡易的畫圖板應(yīng)該有取色器、畫筆工具、直線工具、矩形工具、圓形工具、一鍵清除這六項基本功能。做這個程序只需用到Canvas和Button兩種控件。Python 提供了多個圖形開發(fā)界面的庫,Tkinter、wxPython、Jython都是常用Python GUI 庫。Tkinter是一個輕量級的跨平臺圖形用戶界面(GUI)開發(fā)工具,是Python自帶的官方標(biāo)準(zhǔn)庫,安裝Python 之后直接導(dǎo)入就可以使用, 我們常見的Python IDLE就是使用Tkinter實現(xiàn)的。需要用到的函數(shù)及函數(shù)用法如下表:

      二、 界面設(shè)計

      這里使用了網(wǎng)格布局方式的grid布局管理器,簡便易用。首先,用import導(dǎo)入Tkinter模塊及colorchooser函數(shù)。

      然后設(shè)置窗口標(biāo)題及背景顏色并創(chuàng)建六個功能按鈕,并設(shè)置row(行)值為0,column(列)值依次增加以將六個按鈕放在第0行的不同列上。接著在第1行創(chuàng)建一個Canvas畫布控件。并且將columnspan值設(shè)為6以對0~5列進行合并。這樣Canvas組件就占了6列,有了足夠的寬度。

      代碼如圖1。

      運行效果如圖2。

      三、 功能實現(xiàn)

      1.實現(xiàn)按鈕響應(yīng)

      接下來我們開始給這些按鈕編寫功能。首先寫出六個按鈕的事件響應(yīng)函數(shù),并進行綁定。

      這里我們聲明了兩個全局變量:一個是Shape,用于儲存當(dāng)前工具所繪制的形狀;另一個是color,用于儲存當(dāng)前顏色的十六進制顏色值。

      在取色器事件響應(yīng)函數(shù)中,我們使用了askcolor函數(shù)。在使用askcolor函數(shù)時,用戶選取顏色點擊確定后的返回值是一個元組,元組中下標(biāo)為0的元素是一個元組(R,G,B),表示用戶選取顏色的RGB值,下標(biāo)為1的元素是所選顏色的十六進制值。

      在畫筆、矩形、直線、圓形工具的事件響應(yīng)函數(shù)中,我們只需要將全局變量Shape設(shè)置成代表形狀的相應(yīng)字符串就行了(注:p代表畫筆,l代表直線,r代表矩形,c代表圓形)。

      在一鍵清除事件響應(yīng)函數(shù)中,我們用Canvas的delete(ALL)函數(shù)刪除畫布的所有內(nèi)容。

      寫完函數(shù)之后,我們把這幾個按鈕的事件響應(yīng)函數(shù)和左鍵單擊按鈕的事件綁定起來,這樣在用戶按下按鈕的時候就會觸發(fā)響應(yīng)函數(shù)了,代碼如圖3。

      2.畫布功能實現(xiàn)

      然后我們在Canvas上寫繪制圖形的核心代碼。經(jīng)過分析,我們在畫板上畫圖時一般分為三個階段——落筆(按下鼠標(biāo)左鍵)、繪制(按住鼠標(biāo)左鍵并移動)、抬筆(松開鼠標(biāo)左鍵)。

      而我們在處理矩形、圓形、直線操作時,只需要在落筆時記錄起始點的坐標(biāo)prevX及抬筆時終止點的坐標(biāo)prevY,再用畫布的函數(shù)繪制相應(yīng)圖形就行了。因此我們就把這三個工具負(fù)責(zé)繪制相關(guān)功能的函數(shù)都合在了落筆函數(shù)pen_down和抬筆函數(shù)pen_up里面,代碼如圖4。

      但是畫筆工具就沒這么容易了,畫筆工具需要實時繪制,即鼠標(biāo)到哪兒筆跡就到哪兒。所以我們需要(在使用畫筆工具時)按下鼠標(biāo)就不斷地繪制點,這樣就可以做到實時繪制了。

      不過問題又來了,Canvas中并沒有繪制點的坐標(biāo)。所以我們需要用繪制直線的函數(shù)create_line并將起始點坐標(biāo)和終止點坐標(biāo)都設(shè)為當(dāng)前鼠標(biāo)的坐標(biāo),這樣就可以在鼠標(biāo)走過的地方留下小點了,點動成線就有了筆跡。最后把畫筆繪制的函數(shù)draw和按下鼠標(biāo)左鍵不放并拖動的事件綁定在一起就行了。

      還需要注意的是,在draw函數(shù)里,務(wù)必要判斷當(dāng)前的工具是不是畫筆,不然在使用其他工具時也會在鼠標(biāo)后面出現(xiàn)一條筆跡。

      四、運行測試

      至此,畫圖板所有的代碼都完成了,接下來運行測試,修改Bug。簡易畫圖板就實現(xiàn)了(圖5)!

      9885F23B-6D7E-47AB-B894-04C86496F1B7

      猜你喜歡
      左鍵響應(yīng)函數(shù)畫布
      一類具有Beddington-DeAngelis響應(yīng)函數(shù)的階段結(jié)構(gòu)捕食模型的穩(wěn)定性
      商業(yè)模式畫布
      商界評論(2022年12期)2022-03-06 16:43:01
      為什么要在畫布上割一刀?
      讓鮮花在畫布上盛開
      相機響應(yīng)函數(shù)定標(biāo)的正則化方法
      克服動態(tài)問題影響的相機響應(yīng)函數(shù)標(biāo)定
      秦嶺太白山地區(qū)樹輪寬度對氣候變化的響應(yīng)
      大師的畫布
      ET2000服裝CAD軟件制版模塊教程
      批量選文件,快!
      五常市| 福海县| 台州市| 东山县| 临安市| 日喀则市| 锦屏县| 林周县| 祁阳县| 库伦旗| 兴化市| 应用必备| 巩留县| 宜城市| 四子王旗| 女性| 咸阳市| 扬州市| 新巴尔虎右旗| 临邑县| 新宾| 松原市| 恩平市| 织金县| 开阳县| 肇庆市| 漳浦县| 格尔木市| 伊宁市| 乌海市| 平顺县| 衡阳市| 方山县| 霞浦县| 电白县| 新野县| 河北省| 乌什县| 新乡县| 栾川县| 通化县|