国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

用PythonTkinter模塊做簡(jiǎn)易畫(huà)圖板

2022-06-01 16:38
電腦報(bào) 2022年20期
關(guān)鍵詞:畫(huà)布畫(huà)筆鼠標(biāo)

一、功能需求分析

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

二、 界面設(shè)計(jì)

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

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

代碼如圖1。

運(yùn)行效果如圖2。

三、 功能實(shí)現(xiàn)

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

接下來(lái)我們開(kāi)始給這些按鈕編寫(xiě)功能。首先寫(xiě)出六個(gè)按鈕的事件響應(yīng)函數(shù),并進(jìn)行綁定。

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

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

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

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

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

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

然后我們?cè)贑anvas上寫(xiě)繪制圖形的核心代碼。經(jīng)過(guò)分析,我們?cè)诋?huà)板上畫(huà)圖時(shí)一般分為三個(gè)階段——落筆(按下鼠標(biāo)左鍵)、繪制(按住鼠標(biāo)左鍵并移動(dòng))、抬筆(松開(kāi)鼠標(biāo)左鍵)。

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

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

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

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

四、運(yùn)行測(cè)試

至此,畫(huà)圖板所有的代碼都完成了,接下來(lái)運(yùn)行測(cè)試,修改Bug。簡(jiǎn)易畫(huà)圖板就實(shí)現(xiàn)了(圖5)!

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

猜你喜歡
畫(huà)布畫(huà)筆鼠標(biāo)
小畫(huà)筆 大世界
跟蹤導(dǎo)練(三)
小畫(huà)筆 大世界
小畫(huà)筆
跟蹤導(dǎo)練(一)
大師的畫(huà)布
小畫(huà)筆
鼠標(biāo)折疊筆
45歲的鼠標(biāo)
超能力鼠標(biāo)