2020年10月7日星期三

012 趣學Python程式設計 第1部分 學習程式設計 第12章 用tkinter畫高級圖形

 申明本站飛宇網 https://feiyetopro.blogspot.com/自網路收集整理之書籍文章影音僅供預覽交流學習研究,其[書籍、文章、影音]情節內容, 評論屬其個人行為, 與本網站無關。版權歸原作者和出版社所有,請在下載 24 小時內刪除,不得用作商業用途;如果您喜歡其作品,請支持訂閱購買[正版]謝謝!



12章 用tkinter畫高級圖形

用海龜畫圖的問題是海龜………………了。就算海龜以它最快的速度跑也還是太慢。對海龜來講這不是個問題,但是對於電腦繪圖來講就是個問題了。

電腦繪圖,尤其是在遊戲裡,通常都要求能快速移動。如果你有一個遊戲平臺,或者你是在電腦上玩遊戲,可以想像一下你在螢幕上見到的圖形。二維(2D)的圖形是平的,遊戲中的角色一般只是上下左右移動,就像很多任天堂遊戲機,索尼PSP,還有手機遊戲一樣。在偽三維(3D)遊戲中,圖像看上去更加真實,但是角色通常只是在一個平面上移動(這個也叫作等距圖形)。最後就是3D遊戲,它在螢幕上面試圖再現真實場景。不論遊戲用2D、偽3D還是3D圖形,它們都有一個共同點:都要在電腦螢幕上快速繪圖。


如果你以前從來沒有自己做過動畫,那麼試試下面這個簡單的項目。

1.拿來一疊白紙,在第一張紙的底角畫點東西(比方說線條小人兒)。

2.在第二張紙的底角畫上同樣的線條小人兒,不過讓他的腿移動一點點。

3.在下一次,再畫這個線條小人兒,讓它的腿動得更多一點。

4.逐漸地一張一張在底角畫上變化的小人兒。

當你畫完以後,快速翻動這些紙,你會看到你的線條小人兒在移動。這是所有動畫的基本原理,不論是電視上的卡通還是你遊戲機或電腦上的遊戲。先畫一張圖,再畫一個稍稍有點變化的圖,這就讓人感覺它在移動。要讓圖像看起來是在移動,你需要把每一幀或者動畫的每一段都顯示得非常快。

Python提供了多種製作圖形的方法。除了turtle模組,你還可以使用外部模組(需要單獨安裝),還有Python標準安裝程式中自帶的tkinter模組。tkinter可以用來創建完整的應用程式,比如簡單的文字處理軟體,還有簡單的繪圖軟體。在這一章裡,我們會看看如何用tkinter來創作圖形。

12.1 創造一個可以點的按鈕

作為我們的第一個例子,我們要用tkinter創建一個帶按鈕的簡單程式。輸入以下代碼:


在第一行上,我們引入了tkinter模組的內容。用from 模組名 import *就可以在不用模組名字的情況下使用模組的內容了。而如果像前面例子中用了import turtle,我們就得用模組的名字才能訪問它的內容:



如果用了import *,我們就不用像在第4章和第11章一樣調用turtle.Pen了。對於turtle模組來講這個作用並不大,但是對於有很多類和函數的模組卻很有用,因為它能讓你少敲幾下鍵盤。


在按鈕例子的下一行,我們創建了一個包含Tk類物件的變數tk = Tk(),這和我們創建turle裡的Pen物件一樣。tk物件創建一個基本的視窗,我們可以在上面增加其他東西,例如按鈕、輸入框,或者用來畫圖的畫布。這是tkinter模組所提供的最主要的類,沒有這個Tk類的對象,你就沒辦法畫出任何圖形或者動畫。

在第三行,我們創建了一個按鈕,代碼是btn = Button後面跟著變數tk作為第一個參數,然後是按我作為按鈕上面顯示的文字,也就是(tk, text = “click me”)。儘管我們已經把這個按鈕加到了視窗中,可它還不會顯示出來,除非你輸入btn.pack()這一行來讓按鈕這麼做。如果有其他的按鈕或者物件要顯示的話,它還讓螢幕上的每個東西都排列好。結果如圖12-1所示。

這個按我的按鈕什麼也不做。就算你點上一天也不會有任何事發生,除非我們改一些代碼(別忘記先關閉你之前創建的視窗)。


12-1 創建的按鈕

首先,我們創建一個函數來列印一些文字:


然後改動我們的例子讓它使用這個新函數:


請注意,我們只對前面的代碼做了一點點修改:加上了command參數,它讓Python在按鈕被點擊時調用hello函數。

現在當你點擊按鈕時,你會看到在Shell程式中寫著你好。每次你點擊按鈕都會看到它。在圖12-2裡,我點擊了按鈕五次。


12-2 點擊五次按鈕

這是我們第一次在示例代碼中使用"具名參數",在繼續畫圖之前讓我們先來聊聊這個功能。

12.2 使用具名參數

具名參數和普通的參數一樣,只是它不是按照函數所提供的參數的順序來決定哪一個參數獲得哪一個值(第一個參數得到第一個值,第二個參數得到第二個值,第三個參數得到第三個值,等等),我們明確地定義值的名字,所以可以寫成任何順序。

有時,函數有很多參數,我們不是總要給每個參數都賦值。具名參數可以讓我們只為我們想給它賦值的參數提供值。

例如,假設我們有一個函數叫作person,它有兩個參數:寬(width)和高(height)。


通常,我們是這樣調用它的:


使用具名參數,我們可以調用函數並指定每個值賦給哪個參數:


隨著我們越來越多地應用tkinter模組,具名參數會對我們越來越有幫助。

12.3 創建一個畫圖用的畫布

按鈕是個不錯的工具,但是對於在螢幕上畫東西來講就沒什麼用處了。如果要畫圖的話,我們就需要一個不同的要素:一個canvas(畫布)物件,也就是Canvas類的物件(由tkinter模組提供)。

當我們創建一個畫布時,我們給Python傳入畫布的寬度和高度(以圖元為單位)。其他方面和按鈕的代碼相同。下面是一個例子:


和按鈕的例子一樣,在你輸入tk = Tk()時,會出現一個視窗。在最後一行,我們用canvas.pack()把畫布佈置好,這會把視窗變成寬500圖元,高500圖元,和第三行代碼定義的一樣。


還是和按鈕的例子一樣,pack函數讓畫布顯示在視窗中正確的位置上。如果沒調用這個函數,就不會正常地顯示任何東西。

12.4 畫線

要在畫布上畫線,就要用圖元座標。座標,定義了一個平面上圖元的位置。在一個tkinter畫布上,座標決定了圖元橫向(從左到右)的距離,以及縱向(從上到下)的距離。

例如,因為我們的畫布是500圖元寬,500圖元高,那麼螢幕右下角的座標就是(500500)。要畫出如圖12-3所示的線條,我們要使用起點座標(00)和終點座標(500500)。


12-3 在畫布上畫線

我們用create_line函數來指定這些座標,如下所示:


函數creat_line返回1,它是個標誌,我們以後再來瞭解它。如果我們要用turtle模組做同樣的事情,那就需要下面這段代碼:


tkinter的代碼看上去已經改進了很多。它略短了一些,也簡單了一些。

現在讓我們看看canvas物件上都有哪些可用的函數,用它們來做些更有趣的繪畫。

12.5 畫盒子

turtle模組,我們畫盒子是可以通過向前,轉彎,再向前,再轉彎,以此類推來畫一個盒子。最後,我們可以通過改變向前移動的距離來畫出一個長方形或正方形。


畫正方形和長方形對於tkinter模組來說就簡單多了。你只需要知道各個角的座標。下面是一個例子(你現在可以關閉其他的視窗了):


在這段代碼中,我們用tkinter建立一個400圖元寬,400圖元高的畫布,然後在視窗的左上角畫一個正方形,如圖12-4所示。


12-4 畫一個正方形

在代碼的最後一行我們傳給canvas.create.rectangle的參數就是正方形的左上角和右下角的座標。這些座標是參照畫布左邊和頂邊的距離。在這裡前一對座標(左上角)距左邊10圖元,距頂邊10圖元(也就是前兩個數字10, 10)。正方形的右下角距左邊50圖元,距頂邊50圖元(就是50, 50這兩個數字)。

我們用x1y1x2y2來指代這兩組座標。要畫一個長方形,我們可以增加第二個座標中距離畫布邊緣左邊的長度(增大參數x2的值),像這樣:


在這個例子裡,矩形左上角的座標(它在螢幕上的位置)是(10, 10),右下角的座標是(300, 50)。結果我們得到了一個和原來的正方形一樣高,但是寬很多的矩形,如圖12-5所示。


12-5 畫一個矩形

我們也可以通過增加第二個角距離畫布頂邊的距離(增加參數y2的值),畫出另一個矩形:


這個對create_rectangle函數的調用依次意味著:

  • 從畫布的左上角橫著數10個圖元。
  • 再從上向下數10個圖元。這裡就是矩形的起始角。
  • 橫著數50個圖元,向下數300個圖元畫出一個矩形來。

畫出的結果如圖12-6所示。


12-6 再畫一個矩形

12.5.1 畫許多矩形

讓我們用很多大小各異的矩形來填滿畫布吧。我們可以引入random亂數模組,然後寫一個函數用亂數作為矩形左上角和右下角的座標。

我們會用到random模組提供的randrange函數。當我們給這個函數傳入一個數位,它會返回一個在0和這個數位之間的隨機整數。例如,調用randrange(10)將會返回一個09之間的數字,randrange(100)將會返回一個099之間的數字,等等。

我們在函數中是這樣使用randrange的。通過選擇新建視窗來創建一個新視窗,然後輸入如下代碼:



我們先定義一個函數(def random_rectangle),它有兩個參數:寬(width)和高(height)。然後,我們用randrange函數來建立兩個代表矩形左上角的變數,分別使用總寬度和高度作為參數x1 = random.randrange(width)y1 = random.randrange(height)。事實上,對於第二行來講,它的意思就是建立變數x1,設定它的值是從0到參數width之間的一個亂數

接下來的兩行為矩形的右下角創建變數,並且考慮進左上角的座標(x1y1),把它們加上一個亂數。函數的第三行實際上就是創建變數x2,它是由前面計算得到的x1加上一個亂數

最後,我們用變數x1y1x2y2來調用canvas.create_rectangle在畫布上畫出矩形。

讓我們來試一試random_rectangle這個函數,把畫布的寬度和高度作為參數。在你剛輸入的函數後面加上下面這行代碼:


保存你剛剛輸入的代碼(選擇保存,然後輸入檔案名,比如randomrect.py),然後選擇運行運行模組。如果你看到這個函數沒問題的話,那麼創建一個迴圈來多次調用random_rectangle把螢幕上畫滿矩形吧。讓我們試著用一個for迴圈來畫100個隨機長方形。加上下面的代碼,保存,然後再試著運行一下:


這段代碼畫出來的東西有點亂,但看上去有點像現代藝術,如圖12-7所示。


12-7 隨機畫出的100個矩形

12.5.2 設置顏色

當然,我們想畫出有顏色的畫。讓我們改一改random_rectangle函數,傳入一個額外的參數(fill_color)來指定矩形的顏色。在新視窗中輸入如下代碼,保存為colorrect.py


現在,create_rectangle函數把fill_color作為一個參數,它指定畫出矩形所需要的顏色。


像下面這樣,我們可以給函數傳入有命名的顏色(用400圖元寬,400圖元高的畫布)來創建一系列不同顏色的矩形。在嘗試這個例子時,你也許喜歡通過拷貝粘貼來節省一些輸入。做法是,選中要拷貝的文字,按Ctrl-C來拷貝,點擊一個空行,按Ctrl-V來粘貼。把這些代碼加到colorrect.py的函數的下面:


大多數命名的顏色都會顯示成你所期望的顏色,但是有些會產生出一條錯誤資訊(取決於你用的是WindowsMac OS X還是Linux)。

但是如果要定制一個和有命名的顏色不完全一樣的顏色怎麼辦?還記得在第11章我們用紅綠藍三種顏色各自的百分比來設置海龜筆的顏色嗎?用tkinter來設置每個主色的量(紅綠藍)相對來講更複雜一點,但這難不倒我們。

當用turtle模組時,我們用90%的紅色,75%的綠色,沒有藍色來創建金色。在tkinter中,我們可以用這行代碼來創建同樣的金色:


在值ffd800之前的#號告訴Python我們提供的是一個十六進位數字。十六進位是在電腦程式設計中常常用到的一種表達數位的方法。與十進位數字字以10為基數(09)不同,它採用16作為基數(09,然後是AF)。如果你還沒學過數學中的基數的話,只要記得你可以用字串中的預留位置%x來把一個普通的數位轉換成十六進位數(參見第3章中在字串裡嵌入值)。例如,要把十進位數字字15轉成十六進位,你可以這樣做:


如果要確保得到的數字至少有兩位元,我們可以稍微改動一下格式預留位置:


tkinter模組提供了一個簡單的方法來得到十六進位顏色值。試試把下面的代碼加到colorrec.py中(可以把其他對random_rectangle函數的調用刪除)。


這段代碼會顯示一個顏色選擇器,如圖12-8所示。


12-8 顏色選擇器

當你選擇了一個顏色並按確定,會出現一個元組。這個元組中包含了另一個元組,其中有三個數位和一個字串:


這三個數字代表紅綠藍的量。在tkinter中,在一個顏色組合中每個主色的量分別由一個0255之間的數字表示(這和turtle模組中用百分比表示主色有所不同)。元組中的字元裡是這三個數字的十六進位版本。

你也可以把字串的值拷貝粘貼來使用,或者把元組作為一個變數保存,然後用索引位置來獲得十六進位的值。

讓我們用random_rectangle函數來看看它好不好用。


結果如圖12-9所示。


12-9 為矩形設置顏色

12.6 畫圓弧

圓弧是圓周的一段,或者說是一種曲線,但是為了用tkinter畫出一個圓弧,你需要用create_arc函數在一個矩形中作圖,如圖12-10所示。代碼是這樣的:




12-10 畫一條圓弧

如果你已經把所有的tkinter視窗都關閉了,或者重新開啟了IDLE,請確保重新引入tkinter然後再次創建畫布,代碼如下:


這段代碼把包含著圓弧的矩形的左上角座標設置為(10, 10),就是橫向數10個圖元,再向下數10個圖元,右下角座標是(200, 100),就是橫向數200個圖元,再向下數100個圖元。下一個參數extent是用來指定圓弧的角度。我們在第4章裡講過,角度就是一種對圓周上的距離的度量。圖12-11是兩個圓弧的例子,分別用了45度和270度:


12-11 兩個不同角度的圓弧

下面的代碼在頁面上自上而下畫出幾個不同的圓弧,這樣你就可以看到對於create_arc函數使用不同角度的效果,如圖12-12所示。



12-12 畫出幾個不同的圓弧


在畫最後一個圈時我們用了
359度而不是360度,因為tkinter360度當成0度,如果用360度的話就什麼也不會畫出來。

12.7 畫多邊形

多邊形就是一個有三個或三個以上邊的形狀。常規的多邊形有三角形、正方形、矩形、五邊形、六邊形等。還有邊長不等的不規則圖形,可能有很多邊,形狀各異。

當我們用tkinter來畫多邊形時,你要為多邊形的每個點提供座標。下面是畫三角形的方法:


這個畫三角形的例子從xy座標(10, 10)開始,畫到(100, 10),然後結束於(100, 110)。結果如圖12-13所示。


12-13 畫一個三角形

我們可以再畫一個不規則多邊形(角度或者邊長不等的形狀),使用如下代碼:


這段代碼從座標(200, 10)開始,畫到(240, 30),再畫到(120, 100),最後結束於(100, 140)tkinter會自動畫回到連線到第一個開始的座標。運行這段代碼的結果如圖12-14所示。


12-14 畫一個不規則多邊形

12.8 顯示文字

除了畫形狀,你還可以用create_text在畫布上寫字。這個函數只需要兩個座標(文字xy的位置),還有一個具名參數來接受要顯示的文字。在下面的代碼中,我們和從前一樣創建畫布,然後在座標位置(150, 100)顯示一句話。把這段代碼保存為text.py


create_text函數還有幾個很有用的參數,比方說字體顏色等。在下面的代碼中,我們調用create_text函數時使用了座標(130, 120),還有要顯示的文字,以及紅色(red)的填充色。


你還可以指定字體(顯示文字所用的字體名稱),方法是給出一個包含字體名和字體大小的元組。例如,大小為20Times字體就是(‘Times’, 20)。在下面的代碼中,我們用大小為15Times字體,大小為20Helvetica字體,還有大小為2230Courier字體。



12-15是使用三種指定字體和五種不同大小調用這個函數的結果。



12-15 顯示文字

12.9 顯示圖片

要用tkinter在畫布上顯示圖片,首先要裝入圖片,然後使用canvas物件上的create_image函數。

你要裝入的任何圖片必須在一個Python可以訪問的目錄中。在我們的例子中,圖片放在 C:\目錄中,也就是C盤的根目錄,當然你也可以把它放在別的地方,如圖12-16所示。


12-16 放在C盤中的圖片

如果你用蘋果電腦或者Linux系統,你可以把圖片放在home目錄中。如果你不能把檔放到C盤裡,那麼放到桌面也行。


tkinter只能裝入GIF圖片,也就是副檔名是.gif的圖片檔。想要顯示其他類型的圖片,如PNG.png)和JPG.jp),你就需要用到其他的模組,比如Python圖像庫(http://www.pythonware.com/products/pil/ )。

我們可以這樣來顯示test.gif圖片:


在最前面四行,我們設置好畫布,這和前面的例子一樣。在第五行,把圖片裝入到變數my_image中。我們用路徑'c:\test.gif'來建立一個PhotoImage。如果你把圖片放在桌面上,你應該用那個路徑來創建PhotoImage,像這樣:


如果圖片已經被裝入到變數中, canvas.create_ image(0, 0, anchor=NW, image=myimage) 使用函數create_image來顯示它。座標(0, 0)是我們要顯示圖片的位置,anchor=NW讓函數使用左上角(NWnorthwest,西北方向的意思)作為畫圖的起始點(否則的話它缺省用圖片的中心作為起始點)。最後一個具名參數image指向裝入的圖片。結果如圖12-17所示。


12-17 顯示圖片

12.10 創建基本的動畫

我們講了如何畫出靜態的圖,那都是一些不會動的畫。現在來做動畫怎麼樣?

動畫並不是tkinter模組的專長,但是基本的處理還是可以做的。例如,我們可以創建一個填了色的三角形,用下面的代碼讓它在螢幕上橫向移動(別忘了選擇新建視窗,保存,然後用運行運行模組來運行代碼):



當你運行這段代碼時,三角形會從螢幕一邊橫向移動到另一邊。如圖12-18所示。


12-18 創建動畫

它是如何工作的呢?和前面一樣,引入tkinter後我們用前面三行來做顯示畫布的基本設置。在第四行,我們用這個函數來創建三角形:



當你輸入這一行時,螢幕上會列印出一個數字,它是這個多邊形的
id。我們以後可以用它來指向這個形狀,下面的例子裡會用到。

接下來,我們寫了一個簡單的for迴圈,從059,以for x in range(0, 60):開始。迴圈中的代碼塊使三角形在螢幕上橫向移動。canvas.move函數會把任意畫好的對象移動到把xy座標增加給定值的位置。例如,canvas.move(1, 5, 0)會把ID1的對象(那個三角形的ID標識)橫移5個圖元,縱移0個圖元。要想把它再移回來,我們可以用函數canvas.move(1, -5, 0)


函數tk.update()強制tkinter更新螢幕(重畫)。如果我們沒用update的話,tkinter會等到迴圈結束時才會移動三角形,這樣的話你只會看到它跳到最後的位置,而不是平滑地穿過畫布。迴圈的最後一行time.sleep(0.05),它讓Python休息二十分之一秒(0.05秒),然後再繼續。

要想讓三角形沿對角線在螢幕上移動,我們可以修改代碼讓它使用move(1, 5, 5)。試試這樣做,先關閉畫布,然後創建一個新檔(檔新視窗),輸入以下代碼:


這段代碼和原來那段有兩點不同:

1.我們把畫布的高度設置為400而不是200canvas = Canvas(tk, width=400, height=400)

2.我們給三角形的xy座標分別加5canvas.move(1, 5, 5)

當你保存代碼並運行後,圖12-19是三角形在迴圈結束後的最後位置。

要讓三角形在螢幕上沿對角線回到開始的位置,要用-5, -5(在檔結尾加上這段代碼):


12-19 三角形最後的位置


12.11
 讓物件對操作有反應

我們可以用消息綁定來讓三角形在有人按下某鍵時有反應。消息是在程式運行中發生的事件,比如有人移動了滑鼠、按下了某鍵,或者關閉了視窗等。你可以讓tkinter監視這些事件,然後做出反應。

要開始處理事件(讓Python在事件發生時做些事情),我們首先要創建一個函數。當我們告訴tkinter將某個特定函數綁到(或者說關聯到)某個特定事件上時就完成了綁定。換句話說,tkinter會自動調用這個函數來處理事件。

例如,要讓三角形在按下回車鍵時移動,我們可以定義這個函數:


這個函數只接受一個參數(event),tkinter用它來給函數傳遞關於事件的資訊。現在我們用畫布canvas上的bind_all函數來告訴tkinter當特定事件發生時應該調用這個函數。全部代碼是這樣的:


該函數的第一個參數說明我們讓tkinter監視什麼事件。在這裡,我們監視的事件叫作<KeyPress-Return>,也就是按下回車鍵。我們告訴tkinter當這個KeyPress事件發生時應該調用movetriangle函數。運行這段代碼,用滑鼠點擊畫布,然後在鍵盤上按回車鍵。


那麼根據按鍵的不同而改變三角形的方向怎麼樣?比方說用方向鍵?這很容易。我們只要把movetriangle函數改成下面這樣:


傳入
movetriangleevent物件中包含了幾個變數。其中一個變數叫做keysymkey symbol,鍵的符號),它是一個字串,包含了實際按鍵的值。其中if event.keysym == ‘Up’:的意思是說如果keysym變數中的字串是‘Up’(向上)的話,我們要用參數(1, 0, -3)來調用canvas.move,就是下面那一行所做的事情。接下來elif event.keysym == ‘Down’:是說如果keysym中是‘Down’(向下)的話,我們用的參數就是(1, 0, 3),等等。

記住,第一個參數是畫布上所畫的形狀的ID數字,第二個是對x(水準方向)座標增加的值,第三個是對y(垂直方向)座標增加的值。

然後我們告訴tkinter,函數movetriangle應當用來處理四種不同的事件(上、下、左、右)。如果你選擇新建視窗創建一個新的Shell程式視窗的話,同樣也會容易得多。在運行代碼之前,把它保存為一個有意義的名字,例如movingtriangle.py


movetriangle函數裡,我們在行 檢查keysym變數是否包含‘Up’。如果有,我們就在第 行用參數為1, 0, -3move函數把三角形向上移動。其中第一個參數是三角形的ID,第二個參數是向右移動的量(我們不想水準向右移動,所以這裡的值是0),第三個參數是向下移動多少(-3圖元)。

然後我們在第 行檢查keysym中是否包含‘Down’,如果是的話,我們在第行把三角形向下移(3個圖元)。最後的檢查是看第 行的值是不是‘Left’,如果是,第行我們就把三角形向左移(-3個圖元)。如果都不是的話,進入第行的else,然後在第 行把三角形向右移。

現在三角形應該能隨按鍵的方向移動了。

12.12 更多使用ID的方法

只要用了畫布上面以create_開頭的函數,例如create_polygon或者create_rectangle等等,它總會返回一個ID。這個識別編號可以在其他畫布的函數中使用,就像早前我們用的move函數一樣。




這個例子的問題是
create_polygon不會總是返回1。例如,如果你之前創建了其他的形狀,它可能會返回23,甚至100也有可能(要看之前創建了多少形狀)。如果我們修改代碼來把返回值作為一個變數保存,然後使用這個變數(而不是直接用數字1),那麼無論返回值是多少,這段代碼都能工作:


move
函數讓我們可以通過ID讓物件在螢幕上移動。但是還有其他畫布上的函數也能改變我們已經畫好的東西。例如,畫布上的itemconfig函數可以用來改變形狀的某些參數,比方說它的填色以及輪廓線的顏色。

假如我們創建了一個紅色的三角形:


我們可以用
itemconfig來改變三角形的顏色,這需要把ID作為第一個參數。下面的代碼的含意是:ID為變數mytriangle中的值的物件的填充顏色改為藍色。


我們也可以給三角形一條不同顏色的輪廓線,同樣使用
ID作為第一個參數:


以後,我們還要學習如何給圖案做出其他改變,比方說隱藏和重現。當我們在下一章開始寫電腦遊戲時,你會發現能夠修改已經在螢幕上的畫好的東西很有用處。


12.13
 你學到了什麼

在這一章裡,你使用tkinter模組在畫布上畫出了簡單的幾何形狀,顯示了圖片,做出了簡單的動畫。你學會了如何用事件綁定來讓圖形回應按鍵,這在我們寫電腦遊戲時很有用。你知道了tkinter中以create開頭的函數是如何返回一個ID數字,並可以在形狀畫好以後利用它來做修改,比方說在螢幕上移動或者修改顏色。

12.14 程式設計小測驗

試試下面的練習來熟悉一下tkinter模組和基本的動畫吧。答案可以在網站http://python-for-kids.com/ 上找到。

#1:在螢幕上畫滿三角形

tkinter寫一個程式來把螢幕上畫滿三角形。然後修改代碼使螢幕上畫滿不同顏色填充的三角形。

#2:移動三角形

修改移動三角形的那段代碼(見創建基本的動畫)來讓它先橫向向右移動,然後向下,再向左,最後回到起始位置。

#3:移動的照片

試著用tkinter在螢幕畫布上顯示一張你自己的照片。一定要GIF格式的照片才行哦!你能讓它在螢幕上橫向移動嗎?

 

 大澳飛宇註:

本書入門精華已為您連載完畢,謝謝閱讀

本書非常值得您去購來學、來據以實踐。為了尊重版權,本人僅能將以上課文讓您學習,其餘課文如有興趣,真要學習的話,請直接向相關網站購買[正版]。謝謝!

《趣學Python編程》語言輕松,通俗易懂,講解由淺入深,力求將讀者閱讀和學習的難度降到最低。任何對計算機編程有興趣的人或者首次接觸編程的人,不論孩子還是成人,都可以通過閱讀本書來學習Python編程。


0 留言:

發佈留言