Python Tkinter Canvas畫(huà)布控件詳解
Canvas 控件具有兩個(gè)功能,首先它可以用來(lái)繪制各種圖形,比如弧形、線條、橢圓形、多邊形和矩形等,其次 Canvas 控件還可以用來(lái)展示圖片(包括位圖),我們將這些繪制在畫(huà)布控件上的圖形,稱之為“畫(huà)布對(duì)象”。
每一個(gè)畫(huà)布對(duì)象都有一個(gè)“唯一身份ID”,這是 Tkinter 自動(dòng)為其創(chuàng)建的,從而方便控制和操作這些畫(huà)布對(duì)象。
通過(guò) Canvas 控件創(chuàng)建一個(gè)簡(jiǎn)單的圖形編輯器,讓用戶可以達(dá)到自定義圖形的目的,就像使用畫(huà)筆在畫(huà)布上繪畫(huà)一樣,可以繪制各式各樣的形狀,從而有更好的人機(jī)交互體驗(yàn)。
Canvas控件基本屬性
下面對(duì) Canvas 控件的常用屬性做簡(jiǎn)單的介紹,如下表所示:
| 屬性 | 方法 |
|---|---|
| background(bg) | 指定 Canvas 控件的背景顏色 |
| borderwidth(bd) | 指定 Canvas 控件的邊框?qū)挾?/td> |
| closeenough | 1. 指定一個(gè)距離,當(dāng)鼠標(biāo)與畫(huà)布對(duì)象的距離小于該值時(shí),認(rèn)為鼠標(biāo)位于畫(huà)布對(duì)象上 2. 該選項(xiàng)是一個(gè)浮點(diǎn)類型的值 |
| confine | 1. 指定 Canvas 控件是否允許滾動(dòng)超出 scrollregion 選項(xiàng)設(shè)置的滾動(dòng)范圍,默認(rèn)值為 True |
| selectbackground | 指定當(dāng)畫(huà)布對(duì)象(即在 Canvas 畫(huà)布上繪制的圖形)被選中時(shí)的背景色, |
| selectborderwidth | 指定當(dāng)畫(huà)布對(duì)象被選中時(shí)的邊框?qū)挾龋ㄟx中邊框) |
| selectforeground | 指定當(dāng)畫(huà)布對(duì)象被選中時(shí)的前景色 |
| state | 設(shè)置 Canvas 的狀態(tài):"normal" 或 "disabled",默認(rèn)值是 "normal",注意,該值不會(huì)影響畫(huà)布對(duì)象的狀態(tài) |
| takefocus | 指定使用 Tab 鍵可以將焦點(diǎn)移動(dòng)到輸入框中,默認(rèn)為開(kāi)啟,將該選項(xiàng)設(shè)置為 False 避免焦點(diǎn)在此輸入框中 |
| width | 指定 Canvas 的寬度,單位為像素 |
| xscrollcommand | 與 scrollbar(滾動(dòng)條)控件相關(guān)聯(lián)(沿著 x 軸水平方向) |
| xscrollincrement | 1. 該選項(xiàng)指定 Canvas 水平滾動(dòng)的“步長(zhǎng)” 2. 例如 '3c' 表示 3 厘米,還可以選擇的單位有 'i'(英寸),'m'(毫米)和 'p'(DPI,大約是 '1i' 等于 '72p') 3. 默認(rèn)為 0,表示可以水平滾動(dòng)到任意位置 |
| yscrollcommand | 與 scrollbar 控件(滾動(dòng)條)相關(guān)聯(lián)(沿著 y 軸垂直方向) |
| yscrollincrement | 1. 該選項(xiàng)指定 Canvas 垂直滾動(dòng)的“步長(zhǎng)” 2. 例如 '3c' 表示 3 厘米,還可以選擇的單位有 'i'(英寸),'m'(毫米)和 'p'(DPI,大約是 '1i' 等于 '72p') 3. 默認(rèn)值是 0,表示可以垂直方向滾動(dòng)到任意位置 |
上述屬性是用來(lái)設(shè)置 Canvas 控件的,下面示例定義了出一張畫(huà)布(Canvas),如下所示:
import tkinter as tk
window = tk.Tk()
window.title("C語(yǔ)言中文網(wǎng)")
window.geometry('400x200')
# 創(chuàng)庫(kù)不允許改變
window.resizable(0,0)
window.iconbitmap('C:/Users/Administrator/Desktop/C語(yǔ)言中文網(wǎng)logo.ico')
# 創(chuàng)建畫(huà)布
canvas = tk.Canvas(window,
bg='#CDC9A5',
height=200,
width=300)
canvas.pack()
window.mainloop()程序運(yùn)行結(jié)果如下:

圖1:tkinter Canvas控件
Canvas控件繪圖常用方法
Cansvas 控件提供了一系列繪制幾何圖形的常用方法,下面對(duì)這些方法做簡(jiǎn)單介紹:
| 方法 | 說(shuō)明 |
|---|---|
| create_line(x0, y0, x1, y1, ... , xn, yn, options) | 1. 根據(jù)給定的坐標(biāo)創(chuàng)建一條或者多條線段; 2. 參數(shù) x0,y0,x1,y1,...,xn,yn 定義線條的坐標(biāo); 3. 參數(shù) options 表示其他可選參數(shù) |
| create_oval(x0, y0, x1, y1, options) | 1. 繪制一個(gè)圓形或橢圓形; 2. 參數(shù) x0 與 y0 定義繪圖區(qū)域的左上角坐標(biāo);參數(shù) x1 與 y1 定義繪圖區(qū)域的右下角坐標(biāo); 3. 參數(shù) options 表示其他可選參數(shù) |
| create_polygon(x0, y0, x1, y1, ... , xn, yn, options) | 1. 繪制一個(gè)至少三個(gè)點(diǎn)的多邊形; 2. 參數(shù) x0、y0、x1、y1、...、xn、yn 定義多邊形的坐標(biāo); 3. 參數(shù) options 表示其他可選參數(shù) |
| create_rectangle(x0, y0, x1, y1, options) | 1. 繪制一個(gè)矩形; 2. 參數(shù) x0 與 y0 定義矩形的左上角坐標(biāo);參數(shù) x 與 y1 定義矩形的右下角坐標(biāo); 3. 參數(shù) options 表示其他可選參數(shù) |
| create_text(x0, y0, text, options) | 1. 繪制一個(gè)文字字符串。其中 2. 參數(shù) x0 與 y0 定義文字字符串的左上角坐標(biāo),參數(shù) text 定義文字字符串的文字; 3. 參數(shù) options 表示其他可選參數(shù) |
| create_image(x, y, image) | 1. 創(chuàng)建一個(gè)圖片; 2. 參數(shù) x 與 y 定義圖片的左上角坐標(biāo); 3. 參數(shù) image 定義圖片的來(lái)源,必須是 tkinter 模塊的 BitmapImage 類或 PhotoImage 類的實(shí)例變量。 |
| create_bitmap(x, y, bitmap) | 1. 創(chuàng)建一個(gè)位圖; 2. 參數(shù) x 與 y 定義位圖的左上角坐標(biāo); 3. 參數(shù) bitmap 定義位圖的來(lái)源,參數(shù)值可以是 gray12、gray25、gray50、gray75、hourglass、error、questhead、info、warning 或 question,或者也可以直接使用 XBM(X Bitmap)類型的文件,此時(shí)需要在 XBM 文件名稱前添加一個(gè) @ 符號(hào),例如 bitmap=@hello.xbm |
| create_arc(coord, start, extent, fill) | 1. 繪制一個(gè)弧形; 2. 參數(shù) coord 定義畫(huà)弧形區(qū)塊的左上角與右下角坐標(biāo); 3. 參數(shù) start 定義畫(huà)弧形區(qū)塊的起始角度(逆時(shí)針?lè)较颍?br />4. 參數(shù) extent 定義畫(huà)弧形區(qū)塊的結(jié)束角度(逆時(shí)針?lè)较颍?br />5. 參數(shù) fill 定義填充弧形區(qū)塊的顏色。 |
注意:上述方法都會(huì)返回一個(gè)畫(huà)布對(duì)象的唯一 ID。關(guān)于 options 參數(shù),下面會(huì)通過(guò)一個(gè)示例對(duì)經(jīng)常使用的參數(shù)做相關(guān)介紹。(但由于可選參數(shù)較多,并且每個(gè)方法中的參數(shù)作用大同小異,因此對(duì)它們不再逐一列舉)
從上述表格不難看出,Canvas 控件采用了坐標(biāo)系的方式來(lái)確定畫(huà)布中的每一點(diǎn)。一般情況下,默認(rèn)主窗口的左上角為坐標(biāo)原點(diǎn),這種坐標(biāo)系被稱作為“窗口坐標(biāo)系”,但也會(huì)存在另外一種情況,即畫(huà)布的大小可能大于主窗口,當(dāng)發(fā)生這種情況的時(shí),可以采用帶滾動(dòng)條的 Canvas 控件,此時(shí)會(huì)以畫(huà)布的左上角為坐標(biāo)原點(diǎn),我們將這種坐標(biāo)系稱為“畫(huà)布坐標(biāo)系”。
繪制直線
下面示例展示了如何在畫(huà)布(Canvas控件)上繪制一條虛線和實(shí)線,代碼如下:
from tkinter import *
root = Tk()
# 設(shè)置窗口的背景顏色以區(qū)別畫(huà)布
root.config(bg='#87CEEB')
root.title("C語(yǔ)言中文網(wǎng)")
root.geometry('450x350')
root.iconbitmap('C:/Users/Administrator/Desktop/C語(yǔ)言中文網(wǎng)logo.ico')
# 設(shè)置畫(huà)布的背景顏色為白色
cv=Canvas(root,bg="white",width =300, height = 250)
# 將控件放置在主窗口中
cv.pack()
# 設(shè)置坐標(biāo)點(diǎn),此處可以元組的形式來(lái)設(shè)置坐標(biāo)點(diǎn)
point=[(10,20),(20,30),(30,40),(40,100),(80,120),(150,90)]
# 創(chuàng)建畫(huà)布,添加線條
# fill 參數(shù)指定填充的顏色,如果為空字符串,則表示透明
# dash 參數(shù)表示用來(lái)繪制虛線輪廓,元組參數(shù),分別代表虛線中線段的長(zhǎng)度和線段之間的間隔
# arrow 設(shè)線段的箭頭樣式,默認(rèn)不帶箭頭,參數(shù)值 first 表示添加箭頭帶線段開(kāi)始位置,last表示到末尾占位置,both表示兩端均添加
# smooth 布爾值參數(shù),表示是否以曲線的樣式劃線,默認(rèn)為 False
# width 控制線寬
line1=cv.create_line(point,fill="purple",dash=(1,1),arrow=LAST,width=5)
print('線段line1的畫(huà)布id號(hào):',line1)
line2=cv.create_line(point,fill="red",arrow=BOTH,smooth=TRUE,width=5)
print('線段line2的畫(huà)布id號(hào):',line2)
# 移動(dòng)其中一條線段,只需要更改其坐標(biāo)就可以,使用 coords()方法移動(dòng)曲線
cv.coords(line2,50,30,25,35,35,40,50,120,60,170,10,180)
# 顯示窗口
root.mainloop()程序運(yùn)行的最終結(jié)果,見(jiàn)下圖:

圖1:tkinter Canvas控件
上述示例中涉及了一部分參數(shù),比如 fill、dash、arrow 等,下表對(duì) create_line() 函數(shù)的相關(guān)參數(shù)做了簡(jiǎn)單介紹:
| 屬性 | 說(shuō)明 |
|---|---|
| activedash | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "active" 的時(shí)候,繪制虛線 |
| activefill | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "active" 的時(shí)候,填充顏色 |
| activestipple | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "active" 的時(shí)候,指定填充的位圖 |
| activewidth | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "active" 的時(shí)候,指定邊框的寬度 |
| arrow | 1. 默認(rèn)線段是不帶箭頭的,通過(guò)設(shè)置該選項(xiàng)添加箭頭到線段中 2. "first" 表示添加箭頭到線段開(kāi)始的位置 3. "last" 表示添加箭頭到線段結(jié)束的位置 4. "both" 表示兩端均添加箭頭 |
| arrowshape | 1. 用一個(gè)三元組來(lái)指定箭頭的形狀,默認(rèn)值是 (8, 10, 3),元組中的數(shù)值分別代表箭頭中三條邊的長(zhǎng)度 |
| capstyle | 1. 指定線段兩端的樣式,默認(rèn)值是 "butt" 2. 該選項(xiàng)的值可以是: "butt"(線段的兩段平切于起點(diǎn)和終點(diǎn)) "projecting"(線段的兩段在起點(diǎn)和終點(diǎn)的位置將 width 選項(xiàng)設(shè)置的長(zhǎng)度分別延長(zhǎng)一半) "round"(線段的兩段在起點(diǎn)和終點(diǎn)的位置將 width設(shè)置的長(zhǎng)度分別延長(zhǎng)一半,并以圓角進(jìn)行繪制) |
| dash | 繪制虛線,該選項(xiàng)值是一個(gè)整數(shù)元組,元組中的元素分別代表短線的長(zhǎng)度和間隔,比如 (3, 5) 代表 3 個(gè)像素的短線和 5 個(gè)像素的間隔 |
| dashoffset | 指定虛線開(kāi)始的偏移位置,比如 dash=(5, 1, 2, 1),dashoffset=3,則從 2 開(kāi)始畫(huà)虛線 |
| disableddash | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "disabled" 的時(shí)候,繪制虛線 |
| disabledfill | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "disabled" 的時(shí)候,填充顏色 |
| disabledstipple | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "disabled" 的時(shí)候,指定填充的位圖 |
| disabledwidth | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "disabled" 的時(shí)候,指定邊框的寬度 |
| fill | 1. 指定填充的顏色,空字符串表示透明 |
| joinstyle | 1. 指定當(dāng)繪制兩個(gè)相鄰線段之間時(shí)接口的樣式,默認(rèn)為 "round" 2. 該選項(xiàng)的值可以是: "round"(以連接點(diǎn)為圓心,1/2 width 選項(xiàng)設(shè)置的長(zhǎng)度為半徑來(lái)繪制圓角) "bevel"(在連接點(diǎn)處將兩線段的夾角做平切操作) "miter"(沿著兩線段的夾角延伸至一個(gè)點(diǎn)) |
| offset | 指定當(dāng)點(diǎn)畫(huà)模式時(shí)填充位圖的偏移 |
| smooth | 默認(rèn)值為 False,若設(shè)置為 True,表示將以曲線的樣式代替所繪線段 |
| splinesteps | 當(dāng)繪制曲線的時(shí),該選項(xiàng)指定由多少條折線來(lái)構(gòu)成曲線,默認(rèn)值是 12,這里需要注意,只有當(dāng) smooth 選項(xiàng)為 True 時(shí)該選項(xiàng)才會(huì)生效。 |
| state | 指定該畫(huà)布對(duì)象的狀態(tài),默認(rèn)值為 "normal",參數(shù)值有 "normal","disabled"(不可用)和 "hidden"(隱藏)三種狀態(tài)。 |
| stipple | 指定一個(gè)位圖進(jìn)行填充,默認(rèn)值為空字符串,表示實(shí)心 |
| tags | 為創(chuàng)建的畫(huà)布對(duì)象添加標(biāo)簽 |
| width | 指定邊框的寬度 |
對(duì)于扇形、矩形、三角形、圓形等,這些封閉式圖形,它們由輪廓線和填充顏色兩部分組成。在繪制這些圖形時(shí)相關(guān)函數(shù)的可選參數(shù)與上述表格也存在略微差異,下面以繪制扇形的 create_arc() 函數(shù)為例做簡(jiǎn)單的介紹:
| 屬性 | 方法 |
|---|---|
| activedash | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "active" 的時(shí)候,繪制虛線 |
| activefill | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "active" 的時(shí)候,填充顏色 |
| activeoutline | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "active" 的時(shí)候,繪制輪廓線 |
| activeoutlinestipple | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "active" 的時(shí)候,指定填充輪廓的位圖 |
| activestipple | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "active" 的時(shí)候,指定填充的位圖 |
| activewidth | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "active" 的時(shí)候,指定邊框的寬度 |
| dash | 指定繪制虛線輪廓,與繪制線段的含義相同 |
| dashoffset | 指定虛線輪廓開(kāi)始的偏移位置 |
| disableddash | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "disabled" 的時(shí)候,繪制虛線 |
| disabledfill | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "disabled" 的時(shí)候,填充顏色 |
| disabledoutline | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "disabled" 的時(shí)候,繪制輪廓線 |
| disabledoutlinestipple | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "disabled" 的時(shí)候,指定填充輪廓的位圖 |
| disabledstipple | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "disabled" 的時(shí)候,指定填充的位圖 |
| disabledwidth | 當(dāng)畫(huà)布對(duì)象狀態(tài)為 "disabled" 的時(shí)候,指定邊框的寬度 |
| extent | 指定跨度(從 start 選項(xiàng)指定的位置開(kāi)始到結(jié)束位置的角度)默認(rèn)值是 90.0 |
| fill | 與上述表格的含義相同,表示指定的填充顏色,若為空字符串則為透明色 |
| offset | 指定當(dāng)點(diǎn)畫(huà)模式時(shí)填充位置的偏移,參數(shù)值為 "x,y"坐標(biāo)偏移和位置偏移兩種方式,比如 "ne"/"e" 等 |
| outline | 指定輪廓的顏色 |
| outlineoffset | 指定當(dāng)點(diǎn)畫(huà)模式繪制輪廓時(shí)位圖的偏移 |
| outlinestipple | 當(dāng) outline 選項(xiàng)被設(shè)置時(shí),該選項(xiàng)用于指定一個(gè)位圖來(lái)填充邊框,默認(rèn)值是空字符串,表示黑色 |
| start | 指定起始位置的偏移角度 |
| style | 默認(rèn)創(chuàng)建的是扇形,指定該方法創(chuàng)建的是扇形("pieslice")、弓形("chord")還是弧形("arc") |
| tags | 為創(chuàng)建的畫(huà)布對(duì)象添加標(biāo)簽 |
| width | 指定邊框的寬度 |
在實(shí)際的使用的過(guò)程中經(jīng)常用到的參數(shù)有 dash、fill、outline、extend 和 start,但是這么多的參數(shù)我們也不可能都記住,這時(shí)查手冊(cè)是一種很好的方法,官網(wǎng)文檔地址:點(diǎn)擊前往。
下面讓我們來(lái)一組繪制幾何圖形的簡(jiǎn)單示例:
from tkinter import *
root = Tk()
# 設(shè)置主窗口區(qū)的背景顏色以區(qū)別畫(huà)布區(qū)的顏色
root.config(bg='#8DB6CD')
root.title("C語(yǔ)言中文網(wǎng)")
root.geometry('500x400')
root.iconbitmap('C:/Users/Administrator/Desktop/C語(yǔ)言中文網(wǎng)logo.ico')
# 將畫(huà)布設(shè)置為白色
canvas = Canvas(root,width = 400,height = 400,bg='white')
# 設(shè)置基準(zhǔn)坐標(biāo)
x0,y0,x1,y1 = 10,10,80,80
# 繪制扇形,起始角度為 0 度,結(jié)束角度為 270, 扇形區(qū)域填充色為淡藍(lán)色,輪廓線為藍(lán)色,線寬為 2px
arc = canvas.create_arc(x0, y0, x1, y1,start = 0, extent = 270, fill = '#B0E0E6',outline ='blue',width = 2)
# 繪制圓形
oval = canvas.create_oval(x0+150, y0, x1+150, y1,fill ='#CD950C',outline = 'blue',width=2)
# 繪制矩形,并將輪廓線設(shè)置為透明色,即不顯示最外圍的輪廓線,默認(rèn)為黑色
rect = canvas.create_rectangle(x0,y0+100,x1,y1+100,fill='red',outline = '')
# 繪制一個(gè)三角形,填充色為綠色
trigon = canvas.create_polygon(80,80,150,80,200,200, outline="", fill="green",)
# 當(dāng)然也可以繪制一個(gè)任意多邊形,只要你的坐標(biāo)正確就可以
# 繪制一個(gè)多邊形,首先定義一系列的多邊形上的坐標(biāo)點(diǎn)
poly_points=[(0,280),(140,200),(140,240),(270,240),(270,320),(140,320),(140,360)]
polygon = canvas.create_polygon(poly_points,fill="#BF3EFF")
# 放置畫(huà)布在主窗口
canvas.pack()
# 顯示窗口
root.mainloop()程序運(yùn)行結(jié)果如下所示:

圖2:tkinter繪制幾何圖形
注意:create_rectangle() 方法的前兩個(gè)參數(shù)決定了矩形的左上角坐標(biāo),后兩個(gè)參數(shù)決定了矩形的右下角坐標(biāo);另外 create_oval() 方法并不是只能繪制圓形,還能繪制橢圓形,這取決于傳入的參數(shù)。
除了能夠繪制幾何圖形之外,Tkinter 還可以展示圖片、創(chuàng)建位圖以及文本信息等,示例如下所示:
from tkinter import *
root=Tk()
# # 設(shè)置主窗口區(qū)的背景顏色以區(qū)別畫(huà)布區(qū)的顏色
root.config(bg='#8DB6CD')
root.title("C語(yǔ)言中文網(wǎng)")
root.geometry('500x300')
root.iconbitmap('C:/Users/Administrator/Desktop/C語(yǔ)言中文網(wǎng)logo.ico')
# # 將畫(huà)布設(shè)置為白色
cv = Canvas(root,bg='white')
# tkinter 提供的內(nèi)置位圖名稱
bitmaps = ["error", "gray75", "gray50", "gray25", "gray12",
"hourglass", "info", "questhead", "question", "warning"]
# 列出所有的位圖樣式
for i in range(len(bitmaps)):
# 前兩個(gè)參數(shù)指定一個(gè)位圖的位置,后續(xù)依次排列
cv.create_bitmap((i+1)*30,30,bitmap=bitmaps[i])
#并在畫(huà)布上添加文本
# 參數(shù)說(shuō)明,前兩個(gè)參數(shù)(x0,y0)參照點(diǎn),指定文字字符串的左上角坐標(biāo)
# anchor 指定了文本的對(duì)于參照點(diǎn)的相對(duì)位置,以方位來(lái)指定,比如 W/E/N/S等
cv.create_text(30,80,text = "tkinter內(nèi)置位圖預(yù)覽",fill ='#7CCD7C',anchor = W,font =('微軟雅黑',15,'bold'))
# 展示圖片,使用 PhotoImage()來(lái)加載圖片
img = PhotoImage (file="C:/Users/Administrator/Desktop/c.biancheng.gif")
cv.create_image(30,150,image = img,anchor =W)
cv.create_text(30,220,text = "圖片預(yù)覽",fill ='#7CCD7C',anchor = W,font =('微軟雅黑',15,'bold'))
cv.pack()
mainloop()程序運(yùn)行結(jié)果如下:

圖3:tkinter Canvas控件
注意,添加到 Canvas 上的對(duì)象會(huì)一直保留直著。如果你希望修改它們,您可以使用 coords() 和 move() 方法來(lái)移動(dòng)畫(huà)布上的對(duì)象,當(dāng)然您可以使用 delete() 來(lái)刪除它們,示例如下:
from tkinter import *
root=Tk()
# # 設(shè)置主窗口區(qū)的背景顏色以區(qū)別畫(huà)布區(qū)的顏色
root.config(bg='#8DB6CD')
root.title("C語(yǔ)言中文網(wǎng)")
root.geometry('500x300')
root.iconbitmap('C:/Users/Administrator/Desktop/C語(yǔ)言中文網(wǎng)logo.ico')
# 定義移動(dòng)函數(shù)
def move_img():
# 定義移動(dòng)坐標(biāo)
cv.move(image1,50,30)
# # 將畫(huà)布設(shè)置為白色
cv = Canvas(root,bg='white')
# 使用 PhotoImage()來(lái)加載圖片
img = PhotoImage (file="C:/Users/Administrator/Desktop/c.biancheng.gif")
image1=cv.create_image(30,150,image = img,anchor =W)
# 將按鈕放置在畫(huà)布中
btn=Button(cv,text="點(diǎn)擊移動(dòng)畫(huà)布",bg="#8A8A8A",activebackground="#7CCD7C",command=move_img)
# 在指定位置創(chuàng)建一個(gè)窗口控件,tags來(lái)添加標(biāo)簽
cv.create_window(365,250,height=30,width=30,window=btn)
# 調(diào)用delete() 刪除畫(huà)布對(duì)象,若傳入ALL,則刪除所有的畫(huà)布對(duì)象
#cv.delete(image1)
cv.pack()
# 顯示窗口
root.mainloop()程序運(yùn)行結(jié)果如下:

圖4:移動(dòng)畫(huà)布對(duì)象
注意:使用畫(huà)布控件允許用戶自己進(jìn)行繪圖,但這需要與 tkinter 事件機(jī)制相配合才能實(shí)現(xiàn),在后續(xù)會(huì)做相關(guān)介紹。
到此這篇關(guān)于Python Tkinter Canvas畫(huà)布控件詳解的文章就介紹到這了,更多相關(guān)Python Tkinter Canvas內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Python中的 oct 函數(shù)與 min 函數(shù)
本文主要介紹了Python oct 函數(shù)與 min 函數(shù);oct 函數(shù)是 Python 內(nèi)置函數(shù),主要將一個(gè)整數(shù)轉(zhuǎn)為八進(jìn)制,與 ord 函數(shù) / chr 函數(shù) 有點(diǎn)類似;min 函數(shù)返回給定參數(shù)的最小值,參數(shù)可以為序列語(yǔ)法,感興趣的小伙伴請(qǐng)繼續(xù)閱讀下文2021-09-09
python使用布隆過(guò)濾器的實(shí)現(xiàn)示例
這篇文章主要介紹了python使用布隆過(guò)濾器的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
matplotlib共享坐標(biāo)軸的實(shí)現(xiàn)(X或Y坐標(biāo)軸)
在作圖的過(guò)程中,我們經(jīng)常會(huì)遇到子圖共用坐標(biāo)軸的情況,或是共用橫軸標(biāo)軸,也可能是縱坐標(biāo)軸。本文就介紹了matplotlib共享坐標(biāo)軸,感興趣的可以了解一下2021-05-05
python中g(shù)etaddrinfo()基本用法實(shí)例分析
這篇文章主要介紹了python中g(shù)etaddrinfo()基本用法,實(shí)例分析了Python中使用getaddrinfo方法進(jìn)行IP地址解析的基本技巧,需要的朋友可以參考下2015-06-06
Python根據(jù)字典的值查詢出對(duì)應(yīng)的鍵的方法
這篇文章主要介紹了Python根據(jù)字典的值查詢出對(duì)應(yīng)的鍵的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Python?數(shù)據(jù)篩選功能實(shí)現(xiàn)
這篇文章主要介紹了Python?數(shù)據(jù)篩選,無(wú)論是在數(shù)據(jù)分析還是數(shù)據(jù)挖掘的時(shí)候,數(shù)據(jù)篩選總會(huì)涉及到,這里我總結(jié)了一下python中列表,字典,數(shù)據(jù)框中一些常用的數(shù)據(jù)篩選的方法,需要的朋友可以參考下2023-04-04
python Spyder界面無(wú)法打開(kāi)的解決方法
下面小編就為大家分享一篇python Spyder界面無(wú)法打開(kāi)的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04

