亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        用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列進(jìn)行合并。這樣Canvas組件就占了6列,有了足夠的寬度。

        代碼如圖1。

        運行效果如圖2。

        三、 功能實現(xiàn)

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

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

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

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

        在畫筆、矩形、直線、圓形工具的事件響應(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ù)畫布
        不同探源距下241Am的α譜模擬與解析
        一類具有Beddington-DeAngelis響應(yīng)函數(shù)的階段結(jié)構(gòu)捕食模型的穩(wěn)定性
        商業(yè)模式畫布
        商界評論(2022年12期)2022-03-06 16:43:01
        為什么要在畫布上割一刀?
        讓鮮花在畫布上盛開
        相機(jī)響應(yīng)函數(shù)定標(biāo)的正則化方法
        克服動態(tài)問題影響的相機(jī)響應(yīng)函數(shù)標(biāo)定
        大師的畫布
        ET2000服裝CAD軟件制版模塊教程
        擊球兜兜轉(zhuǎn)
        在线观看国产成人自拍视频| 日韩久久久黄色一级av| 91国产超碰在线观看| 男人天堂亚洲天堂av| 国产内射爽爽大片视频社区在线| 亚洲不卡中文字幕无码| 亚洲AV无码一区二区一二区教师| 国产av剧情精品麻豆| 久久久久亚洲av成人片| 欧美日本国产va高清cabal| 亚洲中出视频| 国产人妖在线视频网站| 国精品人妻无码一区二区三区性色| 藏春阁福利视频| 欧美人与物videos另类| 亚洲三级中文字幕乱码| 免费视频成人片在线观看| 国产欧美日韩在线观看| 极品美女销魂一区二区三| 精品国产一区二区三区18p| 国产精品狼人久久久久影院| 四虎影视国产在线观看精品| 亚洲高清国产拍精品熟女| 亚洲人成综合第一网站| 少妇饥渴偷公乱a级无码| 无码国产精品第100页| 亚洲av色精品国产一区二区三区| 精品露脸国产偷人在视频| 亚洲av无码一区二区三区性色| 精品国免费一区二区三区| 亚洲自拍偷拍一区二区三区| 人人妻一区二区三区| 久久精品免费免费直播| 麻豆av在线免费观看精品| 狠狠色狠狠色综合网| 18禁无遮挡羞羞污污污污网站| 一区二区三区国产高潮| av在线免费高清观看| 亚洲色欲久久久综合网| 中文字幕有码一区二区三区| 国产免费操美女逼视频|