Canvas,中文意為畫布,在Tkinter模塊中對(duì)應(yīng)的是一片矩形區(qū)域,給使用者提供繪圖的空間,可以把圖形、文本、橢圓或按鈕等組件放在畫布上,也可以進(jìn)行圖案的繪畫、
在使用Canvas組件之前我們要先來學(xué)習(xí)一下它對(duì)應(yīng)的屏幕坐標(biāo)系。
計(jì)算機(jī)中的圖像我們一般用像素來作單位,每個(gè)像素會(huì)有2個(gè)值,我們在Canvas組件中,對(duì)應(yīng)的窗口左上方的坐標(biāo)為(0,0),也就是說在平面直角坐標(biāo)系中對(duì)應(yīng)的x軸和y軸都為0,窗口右下角的坐標(biāo)為距離x軸和Y軸的兩個(gè)最大值,如圖:
我們在Canvas畫布中放置組件的時(shí)候,一定要保證組件坐標(biāo)的正確。
Canvas的語法結(jié)構(gòu)為:
my_canvas = Canvas ( 父類, 可選項(xiàng) )
父類即為我們放置的上一層窗口名,可選項(xiàng)有bd、bg、continue、cursor、height、width、highlightcolor、relief、scrollregion等,這些選項(xiàng)在前面都有介紹,在這里就不作過多的講解。
Canves組件繪制圖形的方法有多種,分別有create_line、create_rectangle、create_oval、create_arc、create_polygon,我們下面進(jìn)行一一介紹。
1. create_line ? 創(chuàng)建線條
語法格式如下:
canvas.create_line(x1, y1, x2, y2, ..., xn, yn, options)
我們可以通過這種方法在畫布上的兩個(gè)或者n個(gè)點(diǎn)之間畫出一條直線,前兩個(gè)坐標(biāo)(x1,y1)即為起始點(diǎn),(xn,yn)為終點(diǎn)。
代碼如下:
import tkinter class TK: def __init__(self): self.window = tkinter.Tk() self.canvas = tkinter.Canvas(self.window,width = 300,height = 300,bg = 'pink') self.canvas.create_line(30,30,100,200,200,200,300,200,300,300) self.canvas.pack() tkinter.mainloop() m = TK()
效果如圖:
我們選取的坐標(biāo)為(30,30)->(100,200)->(200,200)->(300,300),根據(jù)上面的坐標(biāo)我們畫出上圖。
2. create_rectangle ? 創(chuàng)建矩形
創(chuàng)建矩形的語法格式為:
canvas.create_rectangle(x1,y1,x2,y2,可選項(xiàng))
矩形只需要2個(gè)坐標(biāo)即可確定,因此我們只需要左上角和右下角的坐標(biāo)(x1,y1)和(x2,y2),代碼如下:
import tkinter class TK: def __init__(self): self.window = tkinter.Tk() self.canvas = tkinter.Canvas(self.window,width = 300,height = 300,bg = 'pink') self.canvas.create_rectangle(100,100,200,200) self.canvas.pack() tkinter.mainloop() m = TK()
運(yùn)行如圖:
3. create_oval ? 創(chuàng)建橢圓
語法格式如下:
canvas.create.oval(x1,y1,x2,y2,可選項(xiàng))
四個(gè)坐標(biāo)對(duì)應(yīng)的位置如圖:
4. create_arc ? 創(chuàng)建弧形
語法格式如下:
canvas.create_arc(x1,y1,x2,y2,start = angle,extent = width,可選項(xiàng))
其中,坐標(biāo)對(duì)應(yīng)的和上圖中橢圓對(duì)應(yīng)的一致,start中的值對(duì)應(yīng)的是弧形的起始角度,extent是對(duì)應(yīng)的是弧形逆時(shí)針角度范圍。
代碼如下:
import tkinter class TK: def __init__(self): self.window = tkinter.Tk() self.canvas = tkinter.Canvas(self.window,width = 300,height = 300,bg = 'pink') self.canvas.create_arc(60,60,220,220,start =0,extent = 120,fill ='blue') self.canvas.pack() tkinter.mainloop() m = TK()
運(yùn)行如圖:
5. create_polygon ? 創(chuàng)建多邊形
語法格式如下:
canvas.create_polygon(x1,y1,x2,y2,.....xn,yn,可選項(xiàng))
每個(gè)坐標(biāo)對(duì)應(yīng)一個(gè)位置,第一個(gè)為第一個(gè)頂點(diǎn),依次鏈接,最后一個(gè)坐標(biāo)自動(dòng)關(guān)閉多邊形。
代碼如下:
import tkinter class TK: def __init__(self): self.window = tkinter.Tk() self.canvas = tkinter.Canvas(self.window,width = 300,height = 300,bg = 'pink') self.canvas.create_polygon(150,0,200,100,300,100,200,185,280,280,150,230,20,280,100,185, 0,100,100,100,fill ='red') self.canvas.pack() tkinter.mainloop() m = TK()
運(yùn)行圖如下:
大家可以通過坐標(biāo)的改變?nèi)ギ嫵鲎约合胍嫵龅膱D形,可選的參數(shù)還有dash、outline、sommth和width。
6. 總結(jié)
我們可以通過canvas去繪畫出各式各樣的圖案,當(dāng)然它也其他的功能,在下一節(jié)的例題中我們還會(huì)使用到它。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程