宋雅娟
(蘇州職業(yè)大學(xué) 計(jì)算機(jī)工程學(xué)院,蘇州 215104)
隨著人工智能時(shí)代的來(lái)臨, Python 語(yǔ)言作為人工智能時(shí)代最合適的語(yǔ)言,越來(lái)越受到政府的重視[1]。Python 語(yǔ)言是一門發(fā)展了近 30 年的編程語(yǔ)言,是目前美國(guó)大學(xué)最受歡迎的程序設(shè)計(jì)語(yǔ)言。Python 語(yǔ)言實(shí)際教學(xué)內(nèi)容是分支、循環(huán)、函數(shù)等基本的程序邏輯關(guān)系及功能強(qiáng)大的函數(shù)庫(kù)應(yīng)用,它是目前最接近自然語(yǔ)言的通用編程語(yǔ)言[2]。為了助力初學(xué)者快速方便地學(xué)習(xí)運(yùn)用Turtle庫(kù)及Python基本語(yǔ)法知識(shí)完成圖形繪制程序,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)應(yīng)用軟件,借鑒Windows畫筆程序的繪圖界面,用戶可在界面上用鼠標(biāo)繪圖,軟件會(huì)自動(dòng)生成相應(yīng)的Turtle繪圖程序。這樣可以一邊設(shè)計(jì)一些簡(jiǎn)單圖形,一邊學(xué)習(xí)Python基本語(yǔ)法知識(shí),熟悉Turtle庫(kù)函數(shù)的使用方法,在此基礎(chǔ)上,還可以激發(fā)用戶深入學(xué)習(xí)Python語(yǔ)言的興趣,最終掌握Python語(yǔ)言。
Turtle庫(kù)是Python青少年編程中最重要的標(biāo)準(zhǔn)庫(kù)之一,它由Tkinter庫(kù)開(kāi)發(fā),借助于Turtle庫(kù),編寫一些好玩又有趣的程序和小游戲,可以提高孩子們的編程興趣,提高編程技能。Turtle庫(kù)提供了很多繪圖函數(shù),表1中列出了軟件中使用到的Turtle繪圖函數(shù)。通過(guò)在軟件中繪制不同圖形,觀察自動(dòng)生成的Python代碼,可以掌握Turtle函數(shù)的作用及參數(shù)使用方法。
表1 軟件中用到的Turtle函數(shù)
借助Java軟件的圖形界面開(kāi)發(fā)技術(shù),結(jié)合Turtle庫(kù)中的相關(guān)繪圖函數(shù)而設(shè)計(jì)。系統(tǒng)架構(gòu)如圖1所示。用戶可以在圖形工具欄中選擇基本圖形按鈕,使用顏色工具欄選擇線條顏色、線條工具欄選擇線條粗細(xì),在繪制窗口上拖動(dòng)鼠標(biāo)進(jìn)行圖形的設(shè)計(jì),軟件會(huì)同時(shí)在Python代碼窗口生成相應(yīng)的Python代碼??梢酝ㄟ^(guò)文件菜單保存圖形及相應(yīng)的代碼、加載保存的圖形及代碼,通過(guò)幫助文檔查閱Turtle庫(kù)的函數(shù)的使用說(shuō)明。
圖1 系統(tǒng)總體架構(gòu)圖
軟件的運(yùn)行主界面如圖2所示。主界面使用Java中的面板進(jìn)行布局。最上面為菜單欄,由文件菜單和幫助菜單組成。上側(cè)工具欄由基本圖形選擇面板與線條選擇面板兩個(gè)部分組成,一個(gè)提供繪圖基本工具,一個(gè)提供線條粗細(xì)選擇。最下面的為調(diào)色板面板,提供線條顏色及填充顏色選擇。最右面的為代碼面板,存放自動(dòng)生成的完整Python代碼。圖2為軟件主界面,繪圖面板已經(jīng)使用鼠標(biāo)繪制了兩個(gè)三角形,
圖2 軟件主界面
其中一個(gè)進(jìn)行了顏色填充。右面為生成的Python代碼。生成的代碼在Python環(huán)境中可直接運(yùn)行,結(jié)果如圖3所示。對(duì)比圖2與圖3,可看到在界面上繪制的圖形與在Python環(huán)境中運(yùn)行生成的代碼所得圖形完成一致。這樣就完成了在軟件界面上所見(jiàn)即所得的學(xué)習(xí)方式。用戶可以在界面上選擇圖形進(jìn)行繪制,之后根據(jù)生成的代碼進(jìn)行Python圖形庫(kù)Turtle中函數(shù)的學(xué)習(xí),圖形發(fā)生變化,函數(shù)的參數(shù)隨之會(huì)發(fā)生變化。從而用戶可以獲得對(duì)Turtle庫(kù)的直觀學(xué)習(xí)體驗(yàn),從而激發(fā)學(xué)習(xí)興趣。
圖3 生成代碼的運(yùn)行效果
在繪圖工具欄點(diǎn)選不同按鈕可以使用鼠標(biāo)在界面上繪制不同的圖形,如圖4所示。這是分別選取了直線、三角形、圓后的運(yùn)行結(jié)果,對(duì)照生成的Python代碼即可了解Python中不同圖形的繪制函數(shù)及其參數(shù)、坐標(biāo)情況。繪制圖形時(shí),如果不特別選擇,則自動(dòng)選擇最細(xì)的線條進(jìn)行各種圖形的繪制。線條選擇面板只提供了4種,可供學(xué)生了解線條的設(shè)置方法,之后便可以根據(jù)此規(guī)律自行修改代碼以使用其他尺寸的線條,更有助于學(xué)生自行設(shè)計(jì)自己的線條設(shè)置程序。
圖4 使用繪圖工具欄繪制不同圖形
圖5給出了線條選擇面板及選擇不同粗細(xì)線條在畫圖板上畫出的兩個(gè)矩形,對(duì)照右側(cè)的生成代碼即可掌握到在Python的Turtle庫(kù)中設(shè)置線條粗細(xì)的函數(shù)是Turtle.pensize,函數(shù)參數(shù)是以數(shù)值給出的線條精細(xì)值。
圖5 選擇不同線條畫出的矩形
調(diào)色板面板是以不同顏色塊為圖形的按鈕集合,如果顏料桶按鈕被按下,則點(diǎn)擊后的顏色將用于設(shè)置填充色,否則用于線條顏色。顏色以按鈕方式展示常用的顏色,沒(méi)有提供自定義顏色是為了讓學(xué)生了解Turtle庫(kù)的設(shè)置顏色方法后自行修改代碼來(lái)完成其他顏色的設(shè)計(jì)。圖6為使用調(diào)色板繪制的彩色填充圖形。從生成的代碼中能看到設(shè)置填充色的函數(shù)使用,以及begin_fill()與end_fill()函數(shù)的應(yīng)用。
圖6 使用調(diào)色板填充的藍(lán)色矩形
代碼面板有一個(gè)JTextArea控件來(lái)存放生成的代碼。用戶可在此部分直接拷貝生成的代碼到Python環(huán)境中運(yùn)行,觀察運(yùn)行結(jié)果,并在Python環(huán)境中修改代碼,加深對(duì)程序的理解。圖6代碼在Python環(huán)境中的運(yùn)行結(jié)果如圖7所示。
圖7 生成代碼在Python環(huán)境中運(yùn)行的結(jié)果
程序應(yīng)用面向?qū)ο蟮脑韥?lái)實(shí)現(xiàn),使用不同的類來(lái)表示不同的圖形。類中使用成員變量來(lái)保存圖形的線條顏色、填充顏色、坐標(biāo)、大小等信息。在鼠標(biāo)事件中響應(yīng)鼠標(biāo)運(yùn)作,運(yùn)用Java中的繪圖函數(shù)在屏幕上進(jìn)行圖形的繪制,在繪制結(jié)束松開(kāi)鼠標(biāo)時(shí),生成圖形對(duì)應(yīng)類的對(duì)象,并提取線條粗細(xì)、顏色,起始位置等信息存放于該對(duì)象中,設(shè)置完成后將該對(duì)象保存到所有圖形對(duì)象列表中。之后調(diào)用generateCode方法生成程序開(kāi)頭代碼,調(diào)用各類重寫后的getCode方法生成每個(gè)圖形的對(duì)應(yīng)Python代碼,再生成程序結(jié)尾代碼。所有代碼最后將顯示在代碼窗口中。
Python語(yǔ)言具有豐富的函數(shù)庫(kù),為了促進(jìn)學(xué)生更好、更直觀地學(xué)習(xí)Turtle庫(kù)中的函數(shù)以及Python的基本知識(shí),設(shè)計(jì)實(shí)現(xiàn)了一個(gè)所見(jiàn)即所得的圖形用戶界面。學(xué)生可以在界面上選擇不同線條粗細(xì)、不同顏色、不同圖形進(jìn)行基本圖形和復(fù)雜圖形的繪制,在繪制的同時(shí),軟件會(huì)通過(guò)程序自動(dòng)生成相應(yīng)的Python代碼。使用該軟件,學(xué)生可以快速了解Turtle庫(kù)中的函數(shù)以及具體用法,并掌握繪圖程序整體架構(gòu)、Turtle的坐標(biāo)體系。生成的代碼可以直接放到Python中運(yùn)行,得到跟軟件界面繪制圖形一樣的效果。在此基礎(chǔ)上,學(xué)生可以擴(kuò)展程序、使用Python實(shí)現(xiàn)更復(fù)雜、更豐富的圖形和動(dòng)畫程序。軟件目前只實(shí)現(xiàn)了基本圖形繪制、顏色填充,為了讓軟件更適合應(yīng)用于復(fù)雜圖形的設(shè)計(jì),可以對(duì)程序進(jìn)行擴(kuò)充,增加橡皮、圖形移動(dòng)、復(fù)制、動(dòng)畫設(shè)計(jì)的功能。