用Python中的tkinter模塊作圖


tkinter 可以用來創建完整的應用程序,比如簡單的字處理軟件,還有簡單的繪圖軟件。

一、創建一個可以點的按鈕

用tkinter創建一個帶按鈕的簡單程序,代碼如下:

>>> from tkinter import*
>>> tk = Tk()
>>> btn = Button(tk,text = "click me")
>>> btn.pack()

 

在第一行上,我們引入了 tkinter 模塊的內容。用 from 模塊名 import* 就可以在不用模塊名字的情況下使用模塊的內容了。

下面是我們創建的按鈕:

注:這個“按我”的按鈕什么也不做,除非我們改一些代碼(別忘記先關閉之前創建的窗口)。

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

>>> def hello():
    print('hello world')

 

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

>>> from tkinter import*
>>> tk = Tk()
>>> btn = Button(tk,text = "click me",command = hello)
>>> btn.pack()

 

現在當我們點擊按鈕時就會看到Shell程序中寫着“你好”。每次點擊按鈕都會看到它。效果如下:

(這是我們第一次使用“具名函數”,在繼續畫圖之前我們先來了解下這個函數)

 

二、使用具名函數

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

具名函數可以讓我們只為我們想給它賦值的參數提供值。下面我們舉例說明。

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

>>> def person(width,height):
    print('I am %s feet wide,%s feet high' % (width,height))

 

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

>>> person(4,3)
I am 4 feet wide,3 feet high

 

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

>>> person(height=3,width=4)
I am 4 feet wide,3 feet high

 

大家看,前后賦值的順序雖然不一樣,但結果卻是一樣的。

 

三、創建一個畫圖用的畫布

如果要畫圖的話,我們就需要一個不同的要素:一個 canvas(畫布)對象,也就是Canvas類的對象(由tkinter模塊提供)。

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

>>> from tkinter import*
>>> tk = Tk()
>>> canvas = Canvas(tk,width=500,height=500)
>>> canvas.pack()

 

注:pack函數的作用是讓畫布顯示中正確的位置上。如果沒調用這個函數,就不會正常地顯示任何東西。

 

四、畫線

要在畫布上畫線,就要用到像素坐標。

一般畫布的左上角為起點坐標(0,0),畫布的右下角為終點坐標(500,500)。(根據前面創建畫布的大小所得)

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

>>> canvas.create_line(0,0,500,500)
1

 

函數create_line 返回1,它是個標志。 如果我們要用turtle模塊做同樣的事情,那就需要下面這段代碼:

>>> import turtle
>>> turtle.setup(width=500,height=500)
>>> t=turtle.Pen()
>>> t.up()
>>> t.goto(-250,250)
>>> t.down()
>>> t.goto(500,-500)
turtle模塊畫線

效果如下:

 

五、畫盒子

1,畫正方形

用 turtle模塊,我們畫盒子是可以通過向前,轉彎,再向前,再轉彎,以此類推來畫一個盒子。最后我們可以通過改變向前移動的距離來畫出一個矩形。

但用tkinter模塊畫矩形就變得簡單許多了,我們只需要知道各個角的坐標,例如:

>>> from tkinter import*
>>> tk = Tk()
>>> canvas = Canvas(tk,width=400,height=400)
>>> canvas.pack()
>>> canvas.create_rectangle(10,10,50,50)  ##(10,10)為正方形右上角坐標,(50,50)為正方形右下角坐標

 

 

在這段代碼中,我們用tkinter建立了一個400像素寬,400像素高的畫布,然后在窗口的左上角畫一個正方形,效果如下:

 

 

2,畫長方形

下面嘗試畫兩個長方形(前四行代碼一樣,就最后一行canvas.create_rectangle函數那需要改變下坐標參數):

>>> canvas.create_rectangle(10,10,300,50)
1
>>> canvas.create_rectangle(10,10,50,300)
2

 

 

3,畫許多矩形

引入random隨機數模塊,然后寫一個函數用隨機數作為矩形左上角和右下角的坐標。

random模塊中提供一個叫randrange函數。該函數的作用是:當我們給這個函數傳入一個數字,它會返回一個在0和這個數字之間的隨機整數。例如,調用randrange(10)將會返回一個0~9之間的數字,randrange(100)將會返回一個0~99之間的數字。

from tkinter import*
import random
tk = Tk()
canvas = Canvas(tk,width=400,height=400)
canvas.pack()
def random_rectangle(width,height):
    x1 = random.randrange(width)  ##建立變量x1,設定它的值是從0到參數width之間的一個隨機數
    y1 = random.randrange(height)
    x2 = x1 + random.randrange(width)  ##建立變量x2,它是由前面計算得到的x1加上一個隨機數
    y2 = y1 + random.randrange(height)
    canvas.create_rectangle(x1,y1,x2,y2)  ##用變量x1,y1,x2,y2來調用canvas.create_rectangle在畫布上畫出矩形
for x in range(0,100):  ##用for循環畫100個隨機長方形
    random_rectangle(400,400)  
很多的矩形

(有沒有感覺像現代藝術作品呢,嘿嘿)

 

4,設置顏色

改一下 random_rectangle函數,傳入一個額外的參數(fill_color)來指定矩形的顏色。

from tkinter import*
import random
tk = Tk()
canvas = Canvas(tk,width=400,height=400)
canvas.pack()

def random_rectangle(width,height,fill_color):
    x1 = random.randrange(width)  ##建立變量x1,設定它的值是從0到參數width之間的一個隨機數
    y1 = random.randrange(height)
    x2 = x1 + random.randrange(width)  ##建立變量x2,它是由前面計算得到的x1加上一個隨機數
    y2 = y1 + random.randrange(height)
    canvas.create_rectangle(x1,y1,x2,y2,fill=fill_color)  ##fill_color作為一個參數,指定畫出矩形所需要的顏色
random_rectangle(400,400,'green')
random_rectangle(400,400,'red')
random_rectangle(400,400,'blue')
random_rectangle(400,400,'orange')
random_rectangle(400,400,'yellow')
random_rectangle(400,400,'pink')  ##粉紅色
random_rectangle(400,400,'purple')  ##紫色
random_rectangle(400,400,'violet')  ##紫羅蘭色
random_rectangle(400,400,'magenta')  ##品紅色
random_rectangle(400,400,'cyan')  ##藍綠色
帶顏色的矩形

 

思考:如果我們想定制一個和有命名的顏色不完全一樣的顏色怎么辦?

 

六、畫圓弧

圓弧是圓周的一段,或者說是一種曲線,但是為了用tkinter畫出一個圓弧,我們需要用create_arc函數在一個矩形中作圖:

>>> from tkinter import*
>>> tk = Tk()
>>> canvas = Canvas(tk,width=400,height=400)
>>> canvas.pack()
>>> canvas.create_arc(10,10,200,100,extent=180,style=ARC)

 

圓弧的左上角坐標設置為(10,10),右下角坐標是(200,100)。extent 是用來指定圓弧的角度。

下面我們將在頁面上自上而下畫出幾個不同的圓弧,這樣就可以看到對於create_arc函數使用不同角度的效果了:

>>> canvas.create_arc(10,10,200,80,extent=45,style=ARC)
>>> canvas.create_arc(10,80,200,160,extent=90,style=ARC)
>>> canvas.create_arc(10,160,200,240,extent=135,style=ARC)
>>> canvas.create_arc(10,240,200,320,extent=180,style=ARC)
>>> canvas.create_arc(10,320,200,400,extent=359,style=ARC)

注:在畫最后一個圈時我們用了359度而不是360度,因為tkinter會把360度當成0度,如果用360度的話就什么也畫不出來了。

 

七、畫多邊形

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

>>> from tkinter import*
>>> tk = Tk()
>>> canvas = Canvas(tk,width=400,height=400)
>>> canvas.pack()
>>> canvas.create_polygon(10,10,100,10,100,110,fill="",outline="black")

 

從x,y坐標(10,10)開始,畫到(100,10),然后結束於(100,110)。

下面我們再畫一個不規則多邊形:

>>>canvas.create_polygon(200,10,240,30,120,100,140,120,fill="",outline="black")

 

從坐標(200,10)開始,畫到(240,30),再畫到(120,100),最后結束於(100,140)。tkinter會自動畫回到連線到第一個開始的坐標。

 

總結

這次我們學習了使用tkinter模塊創建按鈕和具名函數的使用;在畫布上畫出簡單的幾何圖形,並學會了上色。

后續階段要學習如何利用tkinter模塊顯示文字和圖片,並嘗試創建基本的動畫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM