Canvas(畫布)組件為 Tkinter 的圖形繪制提供了基礎。Canvas 是一個高度靈活的組件,你可以用它繪制圖形和圖表,創建圖形編輯器,並實現各種自定義的小部件。
何時使用 Canvas 組件?
Canvas 是一個通用的組件,通常用於顯示和編輯圖形。你可以用它來繪制線段、圓形、多邊形,甚至是繪制其它組件。
用法
在 Canvas 組件上繪制對象,可以用 create_xxx() 的方法(xxx 表示對象類型,例如線段 line,矩形 rectangle,文本 text 等):
import tkinter as tk root = tk.Tk() w = tk.Canvas(root, width =200, height = 100) w.pack() #畫一條黃色的橫線 w.create_line(0, 50, 200, 50, fill = "yellow") #畫一條紅色的豎線(虛線) w.create_line(100, 0, 100, 100, fill = "red", dash = (4, 4)) #中間畫一個藍色的矩形 w.create_rectangle(50, 25, 150, 75, fill = "blue") root.mainloop()
注意,添加到 Canvas 上的對象會一直保留直着。如果你希望修改它們,你可以使用 coords(),itemconfig() 和 move() 方法來移動畫布上的對象,或者使用 delete() 方法來刪除:
import tkinter as tk root = tk.Tk() w = tk.Canvas(root, width =200, height = 100) w.pack() line1 = w.create_line(0, 50, 200, 50, fill = "yellow") line2 = w.create_line(100, 0, 100, 100, fill = "red", dash = (4, 4)) rect1 = w.create_rectangle(50, 25, 150, 75, fill = "blue") w.coords(line1, 0, 25, 200, 25) w.itemconfig(rect1, fill = "red") w.delete(line2) tk.Button(root, text = "刪除全部", command = (lambda x = "all" : w.delete(x))).pack() root.mainloop()
你還可以在 Canvas 上顯示文本,使用的是 create_text() 方法:
import tkinter as tk root = tk.Tk() w = tk.Canvas(root, width =200, height = 100) w.pack() w.create_line(0, 0, 200, 100, fill = "green", width = 3) w.create_line(200, 0, 0, 100, fill = "green", width = 3) w.create_rectangle(40, 20, 160, 80, fill = "green") w.create_rectangle(65, 35, 135, 65, fill = "yellow") w.create_text(100, 50, text = "Python") root.mainloop()
使用 create_oval() 方法繪制橢圓形(或圓形),參數是指定一個限定矩形(Tkinter 會自動在這個矩形內繪制一個橢圓):
import tkinter as tk root = tk.Tk() w = tk.Canvas(root, width =200, height = 100) w.pack() w.create_rectangle(40, 20, 160, 80, dash = (4, 4)) w.create_oval(40, 20, 160, 80, fill = "pink") w.create_text(100, 50, text = "Python") root.mainloop()
然后,你想要繪制多邊形,可以使用 create_polygon() 方法:
import tkinter as tk import math root = tk.Tk() w = tk.Canvas(root, width = 200, height = 100, background = "red") w.pack() center_x = 100 center_y = 50 r = 50 points = [ #左上點(A) center_x - int(r * math.sin(2 * math.pi / 5)), center_y - int(r * math.cos(2 * math.pi / 5)), #右上點(C) center_x + int(r * math.sin(2 * math.pi / 5)), center_y - int(r * math.cos(2 * math.pi / 5)), #左下點(E) center_x - int(r * math.sin(math.pi / 5)), center_y + int(r * math.cos(math.pi / 5)), #頂點(B) center_x, center_y - r, #右下點(D) center_x + int(r * math.sin(math.pi / 5)), center_y + int(r * math.cos(math.pi / 5)) ] w.create_polygon(points, outline = "green", fill = "yellow") #fill 默認是 black ,黑色填充 root.mainloop()
最后,不得不說有點遺憾的是 Tkinter 並沒有提供畫“點”的方法。不過,我們可以通過繪制一個超小的橢圓形來表示一個“點”。下邊例子中,通過響應“鼠標左鍵按住拖動”事件(<B1-Motion>),我們在鼠標拖動的同時獲取鼠標的實時位置(x, y),並繪制一個超小的橢圓來代表一個“點”:
import tkinter as tk root = tk.Tk() w = tk.Canvas(root, width = 400, height = 200) w.pack() def paint(event): x1, y1 = (event.x - 1), (event.y - 1) x2, y2 = (event.x + 1), (event.y + 1) w.create_oval(x1, y1, x2, y2, fill = "red") w.bind("<B1-Motion>", paint) tk.Label(root, text = "按住鼠標左鍵並移動,開始繪制你的理想藍圖吧……").pack(side = "bottom") root.mainloop()
以下概念我覺得你應該知道
Canvas 組件支持對象
arc(弧形、弦或扇形)
bitmap(內建的位圖文件或 XBM 格式的文件)
image(BitmapImage 或 PhotoImage 的實例對象)
line(線)
oval(圓或橢圓形)
polygon(多邊形)
rectangle(矩形)
text(文本)
window(組件)
其中,弦、扇形、橢圓形、圓形、多邊形和矩形這些“封閉式”圖形都是由輪廓線和填充顏色組成的,但都可以設置為透明(傳入空字符串表示透明)。
坐標系
由於畫布可能比窗口大(帶有滾動條的 Canvas 組件),因此 Canvas 組件可以選擇使用兩種坐標系:
窗口坐標系:以窗口的左上角作為坐標原點
畫布坐標系:以畫布的左上角作為坐標原點
將窗口坐標系轉換為畫布坐標系,可以使用 canvasx() 或 canvasy() 方法:
def callback(event): canvas = event.widget x = canvas.canvasx(event.x) y = canvas.canvasy(event.y) print canvas.find_closest(x, y)
畫布對象顯示的順序
Canvas 組件中創建的畫布對象都會被列入顯示列表中,越接近背景的畫布對象位於顯示列表的越下方。顯示列表決定當兩個畫布對象重疊的時候是如何覆蓋的(默認情況下新創建的會覆蓋舊的畫布對象的重疊部分,即位於顯示列表上方的畫布對象將覆蓋下方那個)。當然,顯示列表中的畫布對象可以被重新排序。
指定畫布對象
Canvas 組件提供幾種方法讓你指定畫布對象:
Item handles Tags "all" "current"
Item handles 事實上是一個用於指定某個畫布對象的整型數字(也成為畫布對象的 ID)。當你在 Canvas 組件上創建一個畫布對象的時候,Tkinter 將自動為其指定一個在該 Canvas 組件中獨一無二的整型值。然后各種 Canvas 的方法可以通過這個值操縱該畫布對象。
Tags 是附在畫布對象上的標簽,Tags 由普通的非空白字符串組成。一個畫布對象可以與多個 Tags 相關聯,一個 Tag 也可用於描述多個畫布對象。然而,與 Text 組件不同,沒有指定畫布對象的 Tags 不能進行事件綁定和配置樣式。也就是說,Canvas 組件的 Tags 是僅為畫布對象所擁有。
Canvas 組件預定義了兩個 Tags:"all" 和 "current"
"all" 表示 Canvas 組件中的所有畫布對象
"current" 表示鼠標指針下的畫布對象(如果有的話)
以上概念我覺得你應該知道
參數
Canvas(master=None, **options) (class)
master -- 父組件
**options -- 組件選項,下方表格詳細列舉了各個選項的具體含義和用法:
選項 含義
background 指定 Canvas 的背景顏色
bg 跟 background 一樣
borderwidth 指定 Canvas 的邊框寬度
bd 跟 borderwidth 一樣
closeenough
1. 指定一個距離,當鼠標與畫布對象的距離小於該值時,鼠標被認為在畫布對象上
2. 該選項是一個浮點類型的值
confine
1. 指定 Canvas 組件是否允許滾動超出 scrollregion 選項指定的范圍
2. 默認值是 True
cursor 指定當鼠標在 Canvas 上飄過的時候的鼠標樣式
height
1. 指定 Canvas 的高度
2. 單位是像素
highlightbackground 指定當 Canvas 沒有獲得焦點的時候高亮邊框的顏色
highlightcolor 指定當 Canvas 獲得焦點的時候高亮邊框的顏色
highlightthickness 指定高亮邊框的寬度
relief
1. 指定 Canvas 的邊框樣式
2. 默認值是 "flat"
3. 其他可以選擇的值是 "sunken","raised","groove" 和 "ridge"
scrollregion
1. 指定 Canvas 可以被滾動的范圍
2. 該選項的值是一個 4 元組(x1, y1, x2, y2)表示的矩形
selectbackground 指定當畫布對象被選中時的背景色
selectborderwidth 指定當畫布對象被選中時的邊框寬度(選中邊框)
selectforeground 指定當畫布對象被選中時的前景色
state
1. 設置 Canvas 的狀態:"normal" 或 "disabled"
2. 默認值是 "normal"
3. 注意:該值不會影響畫布對象的狀態
takefocus
1. 指定使用 Tab 鍵可以將焦點移動到輸入框中
2. 默認是開啟的,可以將該選項設置為 False 避免焦點在此輸入框中
width
1. 指定 Canvas 的寬度
2. 單位是像素
xscrollcommand
1. 與 scrollbar(滾動條)組件相關聯(水平方向)
2. 使用方法可以參考:Scrollbar 組件
xscrollincrement
1. 該選項指定 Canvas 水平滾動的“步長”
2. 例如 '3c' 表示 3 厘米,還可以選擇的單位有 'i'(英寸),'m'(毫米)和 'p'(DPI,大約是 '1i' 等於 '72p')
3. 默認值是 0,表示可以水平滾動到任意位置
yscrollcommand
1. 與 scrollbar(滾動條)組件相關聯(垂直方向)
2. 使用方法可以參考:Scrollbar 組件
yscrollincrement
1. 該選項指定 Canvas 垂直滾動的“步長”
2. 例如 '3c' 表示 3 厘米,還可以選擇的單位有 'i'(英寸),'m'(毫米)和 'p'(DPI,大約是 '1i' 等於 '72p')
3. 默認值是 0,表示可以水平滾動到任意位置
方法
addtag(tag, method, *args)
-- 添加一個 Tag 到一系列畫布對象中
-- 指定添加 Tag 的位置,可以是:"above","all","below","closest","enclosed","overlapping" 或 "withtag"
-- args 是附加參數,請參考下方等同的方法
addtag_above(tag, item)
-- 為顯示列表中 item 上方的畫布對象添加 Tag
-- 該方法相當於 addtag(tag, "above", item)
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
addtag_all(tag)
-- 為 Canvas 組件中所有的畫布對象添加 Tag
-- 該方法相當於 addtag(tag, "all")
addtag_below(tag, item)
-- 為顯示列表中 item 下方的畫布對象添加 Tag
-- 該方法相當於 addtag(tag, "below", item)
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
addtag_closest(tag, x, y, halo=None, start=None)
-- 將 Tag 添加到與給定坐標(x, y)相臨近的畫布對象
-- 可選參數 halo 指定一個距離,表示以(x, y)為中心,該距離內的所有畫布對象均添加 Tag
-- 可選參數 start 指定一個畫布對象,該方法將為低於但最接近該對象的畫布對象添加 Tag
-- 該方法相當於 addtag(tag, "closet", x, y, halo=None, start=None)
-- 注1:使用的是畫布坐標系
-- 注2:如果同時由幾個畫布對象與給定坐標(x, y)的距離相同,則為位於顯示列表上方的那個畫布對象添加 Tag
addtag_enclosed(tag, x1, y1, x2, y2)
-- 為所有坐標在矩形(x1, y1, x2, y2)中的畫布對象添加 Tag
-- 該方法相當於 addtag(tag, "enclosed", x1, y1, x2, y2)
addtag_overlapped(tag, x1, y1, x2, y2)
-- 跟 addtag_enclosed() 方法相似,不過該方法范圍更廣(即使畫布對象只有一部分在矩形中也算)
-- 該方法相當於 addtag(tag, "overlapping", x1, y1, x2, y2)
addtag_withtag(tag, item)
-- 為 item 參數指定的畫布對象添加 Tag
-- item 參數如果指定一個 Tag,則為所有擁有此 Tag 的畫布對象添加新的 Tag
-- item 參數如果指定一個畫布對象,那么只為其添加 Tag
-- 該方法相當於 addtag(tag, "withtag", item)
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
bbox(*args)
-- 返回一個四元組(x1, y1, x2, y2)用於描述 args 指定的畫布對象所在的矩形范圍
-- 如果 args 參數忽略,返回所有的畫布對象所在的矩形范圍
canvasx(screenx, gridspacing=None)
-- 將窗口坐標系的 X 坐標(screenx)轉化為畫布坐標系
-- 如果提供 gridspacing 參數,則轉換結果將為該參數的整數倍
canvasy(screeny, gridspacing=None)
-- 將窗口坐標系的 Y 坐標(screenx)轉化為畫布坐標系
-- 如果提供 gridspacing 參數,則轉換結果將為該參數的整數倍
coords(*args)
-- 如果僅提供一個參數(畫布對象),返回該畫布對象的坐標 (x1, y1, x2, y2)
-- 你可以通過 coords(item, x1, y1, x2, y2) 來移動畫布對象
create_arc(bbox, **options)
-- 根據 bbox (x1, y1, x2, y2) 創建一個扇形("pieslice")、弓形("chord")或弧形("arc")
-- 新創建的畫布對象位於顯示列表的頂端
-- 創建成功后返回該畫布對象的 ID
-- 下方表格列舉了各個 options 選項的具體含義:
選項 含義
activedash 當畫布對象狀態為 "active" 的時候,繪制虛線 activefill 當畫布對象狀態為 "active" 的時候,填充顏色 activeoutline 當畫布對象狀態為 "active" 的時候,繪制輪廓線 activeoutlinestipple 當畫布對象狀態為 "active" 的時候,指定填充輪廓的位圖 activestipple 當畫布對象狀態為 "active" 的時候,指定填充的位圖 activewidth 當畫布對象狀態為 "active" 的時候,指定邊框的寬度 dash 1. 指定繪制虛線輪廓 2. 該選項值是一個整數元組,元組中的元素分別代表短線的長度和間隔 3. 例如 (3, 5) 代表 3 個像素的短線和 5 個像素的間隔 dashoffset 1. 指定虛線輪廓開始的偏移位置 2. 例如當 dash=(5, 1, 2, 1),dashoffset=3,則從 2 開始畫虛線 disableddash 當畫布對象狀態為 "disabled" 的時候,繪制虛線 disabledfill 當畫布對象狀態為 "disabled" 的時候,填充顏色 disabledoutline 當畫布對象狀態為 "disabled" 的時候,繪制輪廓線 disabledoutlinestipple 當畫布對象狀態為 "disabled" 的時候,指定填充輪廓的位圖 disabledstipple 當畫布對象狀態為 "disabled" 的時候,指定填充的位圖 disabledwidth 當畫布對象狀態為 "disabled" 的時候,指定邊框的寬度 extent 1. 指定跨度(從 start 選項指定的位置開始到結束位置的角度) 2. 默認值是 90.0 fill 1. 指定填充的顏色 2. 空字符串表示透明 offset 1. 指定當點畫模式時填充位圖的偏移 2. 該選項的值可以是:"x,y", "#x,y", "n", "ne", "e", "se", "s", "sw", "w", "nw", "center" outline 指定輪廓的顏色 outlineoffset 1. 指定當點畫模式繪制輪廓時位圖的偏移 2. 該選項的值可以是:"x,y", "#x,y", "n", "ne", "e", "se", "s", "sw", "w", "nw", "center" outlinestipple 1. 當 outline 選項被設置時,該選項用於指定一個位圖來填充邊框 2. 默認值是空字符串,表示黑色 start 指定起始位置的偏移角度 state 1. 指定該畫布對象的狀態 2. 可以是 "normal","disabled"(不可用,不響應事件)和 "hidden"(隱藏) 3. 默認值是 "normal" stipple 1. 指定一個位圖用於填充 2. 默認值是空字符串,表示實心 style 1. 指定該方法創建的是扇形("pieslice")、弓形("chord")還是弧形("arc") 2. 默認創建的是扇形 tags 為創建的畫布對象添加標簽 width 指定邊框的寬度
create_bitmap(position, **options)
-- 在 position 指定的位置(x, y)創建一個位圖對象
-- 創建成功后返回該位圖對象的 ID
-- 下方表格列舉了各個 options 選項的具體含義:
選項 含義
activebackground 指定當位圖對象狀態為 "active" 時候的背景顏色
activebitmap 指定當位圖對象狀態為 "active" 時候填充的位圖
activeforeground 指定當位圖對象狀態為 "active" 時候的前景顏色
anchor 1. 指定位圖在 position 參數的相對位置
2. "n", "ne", "e", "se", "s", "sw", "w", "nw", 或 "center" 來定位(ewsn代表東西南北,上北下南左西右東)
3. 默認值是 "center"
background 1. 指定背景顏色
2. 即在位圖中值為 0 的點的顏色
2. 空字符串表示透明
bitmap 指定顯示的位圖
disabledbackground 指定當位圖對象狀態為 "disabled" 時候的背景顏色
disabledbitmap 指定當位圖對象狀態為 "disabled" 時候填充的位圖
disabledforeground 指定當位圖對象狀態為 "disabled" 時候的前景顏色
foreground 1. 指定前景顏色
2. 即在位圖中值為 1 的點的顏色
state 1. 指定該畫布對象的狀態
2. 可以是 "normal", "disabled" (不可用,不響應事件)和 "hidden"(隱藏)
3. 默認值是 "normal"
tags 為創建的位圖對象添加標簽
create_image(position, **options)
-- 在 position 指定的位置(x, y)創建一個圖片對象
-- 創建成功后返回該圖片對象的 ID
-- 下方表格列舉了各個 options 選項的具體含義:
選項 含義
activeimage 指定當圖片對象狀態為 "active" 時候顯示的圖片
anchor 1. 指定位圖在 position 參數的相對位置
2. "n", "ne", "e", "se", "s", "sw", "w", "nw", 或 "center" 來定位(ewsn代表東西南北,上北下南左西右東)
3. 默認值是 "center"
image 指定要顯示的圖片
disabledimage 指定當圖片對象狀態為 "disabled" 時候顯示的圖片
state 1. 指定該圖片對象的狀態
2. 可以是 "normal", "disabled" (不可用,不響應事件)和 "hidden"(隱藏)
3. 默認值是 "normal"
tags 為創建的圖片對象添加標簽
create_line(coords, **options)
-- 根據 coords 給定的坐標創建一條或多條線段
-- 如果給定的坐標多余兩個點,則會首尾相連變成一條折線
-- 創建成功后返回該畫布對象的 ID
-- 下方表格列舉了各個 options 選項的具體含義:
選項 含義
activedash 當畫布對象狀態為 "active" 的時候,繪制虛線
activefill 當畫布對象狀態為 "active" 的時候,填充顏色
activestipple 當畫布對象狀態為 "active" 的時候,指定填充的位圖
activewidth 當畫布對象狀態為 "active" 的時候,指定邊框的寬度
arrow 1. 默認線段是不帶箭頭的
2. 你可以通過設置該選項添加箭頭到線段中
3. "first" 表示添加箭頭到線段開始的位置
4. "last" 表示添加箭頭到線段結束的位置
5. "both" 表示兩端均添加箭頭
arrowshape 1. 用一個三元組 (a, b, c) 來指定箭頭的形狀
2. a, b, c 分別代表箭頭的三條邊的長
3. 默認值是 (8, 10, 3)
capstyle 1. 指定線段兩端的樣式
2. 該選項的值可以是:
-- "butt"(線段的兩段平切於起點和終點)
-- "projecting"(線段的兩段在起點和終點的位置分別延長一半 width 選項設置的長度)
-- "round"(線段的兩段在起點和終點的位置分別延長一半 width 選項設置的長度並以圓角繪制)
3. 默認值是 "butt"
4. 如果還不理解請看下方圖解你就秒懂了~
dash 1. 繪制虛線
2. 該選項值是一個整數元組,元組中的元素分別代表短線的長度和間隔
3. 例如 (3, 5) 代表 3 個像素的短線和 5 個像素的間隔
dashoffset 1. 指定虛線開始的偏移位置
2. 例如當 dash=(5, 1, 2, 1),dashoffset=3,則從 2 開始畫虛線
disableddash 當畫布對象狀態為 "disabled" 的時候,繪制虛線
disabledfill 當畫布對象狀態為 "disabled" 的時候,填充顏色
disabledstipple 當畫布對象狀態為 "disabled" 的時候,指定填充的位圖
disabledwidth 當畫布對象狀態為 "disabled" 的時候,指定邊框的寬度
fill 1. 指定填充的顏色
2. 空字符串表示透明
joinstyle 1. 指定當繪制兩個相鄰線段之間接口的樣式
2. 該選項的值可以是:
-- "round"(以連接點為圓心,1/2 width 選項設置的長度為半徑繪制圓角)
-- "bevel"(在連接點處對兩線段的夾角平切)
-- "miter"(沿着兩線段的夾角延伸至一個點)
3. 默認值是 "round"
4. 如果還不理解請看下方 create_line() 函數 joinstyle 選項的圖解你就秒懂了~
offset 1. 指定當點畫模式時填充位圖的偏移
2. 該選項的值可以是:"x,y", "#x,y", "n", "ne", "e", "se", "s", "sw", "w", "nw", "center"
smooth 1. 該選項的值為 True 時,將繪制貝塞爾樣條曲線代替線段(資料:戳我 :貝塞爾樣條曲線)
2. 默認值為 False
splinesteps 1. 當繪制貝塞爾樣條曲線的時候,該選項指定由多少條折線來構成曲線
2. 默認值是 12
3. 只有當 smooth 選項為 True 時該選項才能生效
state 1. 指定該畫布對象的狀態
2. 可以是 "normal","disabled"(不可用,不響應事件)和 "hidden"(隱藏)
3. 默認值是 "nor,al"
stipple 1. 指定一個位圖用於填充
2. 默認值是空字符串,表示實心
tags 為創建的畫布對象添加標簽
width 指定邊框的寬度
有關 capstyle 和 joinstyle 選項的圖解:
create_oval(bbox, **options)
-- 根據限定矩形 bbox 繪制一個橢圓
-- 新創建的畫布對象位於顯示列表的頂端
-- 創建成功后返回該畫布對象的 ID
-- 下方表格列舉了各個 options 選項的具體含義:
選項 含義
activedash 當畫布對象狀態為 "active" 的時候,繪制虛線
activefill 當畫布對象狀態為 "active" 的時候,填充顏色
activeoutline 當畫布對象狀態為 "active" 的時候,繪制輪廓線
activeoutlinestipple 當畫布對象狀態為 "active" 的時候,指定填充輪廓的位圖
activestipple 當畫布對象狀態為 "active" 的時候,指定填充的位圖
activewidth 當畫布對象狀態為 "active" 的時候,指定邊框的寬度
dash 1. 指定繪制虛線輪廓
2. 該選項值是一個整數元組,元組中的元素分別代表短線的長度和間隔
3. 例如 (3, 5) 代表 3 個像素的短線和 5 個像素的間隔
dashoffset 1. 指定虛線輪廓開始的偏移位置
2. 例如當 dash=(5, 1, 2, 1),dashoffset=3,則從 2 開始畫虛線
disableddash 當畫布對象狀態為 "disabled" 的時候,繪制虛線
disabledfill 當畫布對象狀態為 "disabled" 的時候,填充顏色
disabledoutline 當畫布對象狀態為 "disabled" 的時候,繪制輪廓線
disabledoutlinestipple 當畫布對象狀態為 "disabled" 的時候,指定填充輪廓的位圖
disabledstipple 當畫布對象狀態為 "disabled" 的時候,指定填充的位圖
disabledwidth 當畫布對象狀態為 "disabled" 的時候,指定邊框的寬度
fill 1. 指定填充的顏色
2. 空字符串表示透明
offset 1. 指定當點畫模式時填充位圖的偏移
2. 該選項的值可以是:"x,y", "#x,y", "n", "ne", "e", "se", "s", "sw", "w", "nw", "center"
outline 指定輪廓的顏色
outlineoffset 1. 指定當點畫模式繪制輪廓時位圖的偏移
2. 該選項的值可以是:"x,y", "#x,y", "n", "ne", "e", "se", "s", "sw", "w", "nw", "center"
outlinestipple 1. 當 outline 選項被設置時,該選項用於指定一個位圖來填充邊框
2. 默認值是空字符串,表示黑色
state 1. 指定該畫布對象的狀態
2. 可以是 "normal","disabled"(不可用,不響應事件)和 "hidden"(隱藏)
3. 默認值是 "normal"
stipple 1. 指定一個位圖用於填充
2. 默認值是空字符串,表示實心
tags 為創建的畫布對象添加標簽
width 指定邊框的寬度
create_polygon(coords, **options)
-- 根據 coords 給定的坐標繪制一個多邊形
-- 新創建的畫布對象位於顯示列表的頂端
-- 創建成功后返回該畫布對象的 ID
-- 下方表格列舉了各個 options 選項的具體含義:
選項 含義
activedash 當畫布對象狀態為 "active" 的時候,繪制虛線
activefill 當畫布對象狀態為 "active" 的時候,填充顏色
activeoutline 當畫布對象狀態為 "active" 的時候,繪制輪廓線
activeoutlinestipple 當畫布對象狀態為 "active" 的時候,指定填充輪廓的位圖
activestipple 當畫布對象狀態為 "active" 的時候,指定填充的位圖
activewidth 當畫布對象狀態為 "active" 的時候,指定邊框的寬度
dash 1. 指定繪制虛線輪廓
2. 該選項值是一個整數元組,元組中的元素分別代表短線的長度和間隔
3. 例如 (3, 5) 代表 3 個像素的短線和 5 個像素的間隔
dashoffset 1. 指定虛線輪廓開始的偏移位置
2. 例如當 dash=(5, 1, 2, 1),dashoffset=3,則從 2 開始畫虛線
disableddash 當畫布對象狀態為 "disabled" 的時候,繪制虛線
disabledfill 當畫布對象狀態為 "disabled" 的時候,填充顏色
disabledoutline 當畫布對象狀態為 "disabled" 的時候,繪制輪廓線
disabledoutlinestipple 當畫布對象狀態為 "disabled" 的時候,指定填充輪廓的位圖
disabledstipple 當畫布對象狀態為 "disabled" 的時候,指定填充的位圖
disabledwidth 當畫布對象狀態為 "disabled" 的時候,指定邊框的寬度
fill 1. 指定填充的顏色
2. 空字符串表示透明
joinstyle 1. 指定當繪制兩個相鄰線段之間接口的樣式
2. 該選項的值可以是:
-- "round"(以連接點為圓心,1/2 width 選項設置的長度為半徑繪制圓角)
-- "bevel"(在連接點處對兩線段的夾角平切)
-- "miter"(沿着兩線段的夾角延伸至一個點)
3. 默認值是 "round"
4. 如果還不理解請看上方圖解你就秒懂了~
offset 1. 指定當點畫模式時填充位圖的偏移
2. 該選項的值可以是:"x,y", "#x,y", "n", "ne", "e", "se", "s", "sw", "w", "nw", "center"
outline 指定輪廓的顏色
outlineoffset 1. 指定當點畫模式繪制輪廓時位圖的偏移
2. 該選項的值可以是:"x,y", "#x,y", "n", "ne", "e", "se", "s", "sw", "w", "nw", "center"
outlinestipple 1. 當 outline 選項被設置時,該選項用於指定一個位圖來填充邊框
2. 默認值是空字符串,表示黑色
smooth 1. 該選項的值為 True 時,將繪制貝塞爾樣條曲線代替線段(資料:戳我 :貝塞爾樣條曲線)
2. 默認值為 False
splinesteps 1. 當繪制貝塞爾樣條曲線的時候,該選項指定由多少條折線來構成曲線
2. 默認值是 12
3. 只有當 smooth 選項為 True 時該選項才能生效
state 1. 指定該畫布對象的狀態
2. 可以是 "normal","disabled"(不可用,不響應事件)和 "hidden"(隱藏)
3. 默認值是 "normal"
stipple 1. 指定一個位圖用於填充
2. 默認值是空字符串,表示實心
tags 為創建的畫布對象添加標簽
width 指定邊框的寬度
create_rectangle(bbox, **options)
-- 根據限定矩形 bbox 繪制一個矩形
-- 新創建的畫布對象位於顯示列表的頂端
-- 創建成功后返回該畫布對象的 ID
-- 下方表格列舉了各個 options 選項的具體含義:
選項 含義
activedash 當畫布對象狀態為 "active" 的時候,繪制虛線
activefill 當畫布對象狀態為 "active" 的時候,填充顏色
activeoutline 當畫布對象狀態為 "active" 的時候,繪制輪廓線
activeoutlinestipple 當畫布對象狀態為 "active" 的時候,指定填充輪廓的位圖
activestipple 當畫布對象狀態為 "active" 的時候,指定填充的位圖
activewidth 當畫布對象狀態為 "active" 的時候,指定邊框的寬度
dash 1. 指定繪制虛線輪廓
2. 該選項值是一個整數元組,元組中的元素分別代表短線的長度和間隔
3. 例如 (3, 5) 代表 3 個像素的短線和 5 個像素的間隔
dashoffset 1. 指定虛線輪廓開始的偏移位置
2. 例如當 dash=(5, 1, 2, 1),dashoffset=3,則從 2 開始畫虛線
disableddash 當畫布對象狀態為 "disabled" 的時候,繪制虛線
disabledfill 當畫布對象狀態為 "disabled" 的時候,填充顏色
disabledoutline 當畫布對象狀態為 "disabled" 的時候,繪制輪廓線
disabledoutlinestipple 當畫布對象狀態為 "disabled" 的時候,指定填充輪廓的位圖
disabledstipple 當畫布對象狀態為 "disabled" 的時候,指定填充的位圖
disabledwidth 當畫布對象狀態為 "disabled" 的時候,指定邊框的寬度
fill 1. 指定填充的顏色
2. 空字符串表示透明
offset 1. 指定當點畫模式時填充位圖的偏移
2. 該選項的值可以是:"x,y", "#x,y", "n", "ne", "e", "se", "s", "sw", "w", "nw", "center"
outline 指定輪廓的顏色
outlineoffset 1. 指定當點畫模式繪制輪廓時位圖的偏移
2. 該選項的值可以是:"x,y", "#x,y", "n", "ne", "e", "se", "s", "sw", "w", "nw", "center"
outlinestipple 1. 當 outline 選項被設置時,該選項用於指定一個位圖來填充邊框
2. 默認值是空字符串,表示黑色
state 1. 指定該畫布對象的狀態
2. 可以是 "normal", "disabled" (不可用,不響應事件)和 "hidden"(隱藏)
3. 默認值是 "normal"
stipple 1. 指定一個位圖用於填充
2. 默認值是空字符串,表示實心
tags 為創建的畫布對象添加標簽
width 指定邊框的寬度
create_text(position, **options)
-- 在 position 指定的位置(x, y)創建一個文本對象
-- 創建成功后返回該文本對象的 ID
-- 下方表格列舉了各個 options 選項的具體含義:
選項 含義
activefill 指定當文本對象狀態為 "active" 時候文本的顏色
activestipple 指定當文本對象狀態為 "active" 時候文本填充的位圖
anchor
1. 指定文本在 position 參數的相對位置
2. "n", "ne", "e", "se", "s", "sw", "w", "nw", 或 "center" 來定位(ewsn代表東西南北,上北下南左西右東)
3. 默認值是 "center"
disabledfill 指定當文本對象狀態為 "disabled" 時候文本的顏色
disabledstipple 指定當文本對象狀態為 "disabled" 時候文本填充的位圖
fill 指定文本的顏色
font 指定文本的字體、尺寸等信息
justify 1. 指定對於多行文本的對齊方式
2. 該選項可以使用的值有:"left"(默認)、"center" 和 "right"
offset 1. 指定當點畫模式時填充位圖的偏移
2. 該選項的值可以是:"x,y", "#x,y", "n", "ne", "e", "se", "s", "sw", "w", "nw", "center"
state 1. 指定該畫布對象的狀態
2. 可以是 "normal","disabled"(不可用,不響應事件)和 "hidden"(隱藏)
3. 默認值是 "normal"
stipple 1. 指定一個位圖用於填充
2. 默認值是空字符串,表示實心
tags 為創建的位圖對象添加標簽
text 指定該文本對象將要顯示的文本內容
width 1. 如果指定該選項,則文本會在該寬度處自動斷行
2. 如果不指定該選項,文本對象的寬度等於文本最長行的長度
create_window(position, **options)
-- 在 position 指定的位置(x, y)創建一個窗口組件
-- 創建成功后返回該窗口組件的 ID
-- 下方表格列舉了各個 options 選項的具體含義:
選項 含義
anchor 1. 指定位圖在 position 參數的相對位置
2. "n", "ne", "e", "se", "s", "sw", "w", "nw", 或 "center" 來定位(ewsn代表東西南北,上北下南左西右東)
3. 默認值是 "center"
height 指定窗口組件的高度
state 1. 指定該圖片的狀態
2. 可以是 "normal","disabled"(不可用,不響應事件)和 "hidden"(隱藏)
3. 默認值是 "normal"
tags 為創建的圖片對象添加標簽
width 指定窗口組件的寬度
window 指定一個窗口組件
dchars(item, from, to=None)
-- 刪除 item 中從 from 到 to(包含)參數中的字符串
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
delete(item)
-- 刪除 item 參數指定的畫布對象
-- 如果不存在 item 指定的畫布對象,並不會產生錯誤
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
dtag(item, tag=None)
-- 在 item 參數指定的畫布對象中刪除指定的 tag
-- 如果 tag 參數被忽略,則刪除指定畫布對象所有的 tags
-- 如果不存在 item 指定的畫布對象,並不會產生錯誤
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
find_above(item)
-- 返回在 item 參數指定的畫布對象之上的 ID
-- 如果有多個畫布對象符合要求,那么返回最頂端的那個
-- 如果 item 參數指定的是最頂層的畫布對象,那么返回一個空元組
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
find_all()
-- 返回 Canvas 組件上所有的畫布對象
-- 返回格式是一個元組,包含所有畫布對象的 ID
-- 按照顯示列表的順序返回
-- 該方法相當於 find_withtag("all")
find_below(item)
-- 返回在 item 參數指定的畫布對象之下的 ID
-- 如果有多個畫布對象符合要求,那么返回最底端的那個
-- 如果 item 參數指定的是最底層的畫布對象,那么返回一個空元組
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
find_closest(x, y, halo=None, start=None)
-- 返回一個元組,包含所有靠近點(x, y)的畫布對象的 ID
-- 如果沒有符合的畫布對象,則返回一個空元組
-- 可選參數 halo 用於增加點(x, y)的輻射范圍
-- 可選參數 start 指定一個畫布對象,該方法僅返回在顯示列表中低於但最接近的一個 ID
-- 注意,點(x, y)的坐標是采用畫布坐標系來表示
find_enclosed(x1, y1, x2, y2)
-- 返回完全包含在限定矩形內所有畫布對象的 ID
find_overlapping(x1, y1, x2, y2)
-- 返回所有與限定矩形有重疊的畫布對象的 ID(讓然也包含在限定矩形內的畫布對象)
find_withtag(item)
-- 返回 item 指定的所有畫布對象的 ID
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
focus(item=None)
-- 將焦點移動到指定的 item
-- 如果有多個畫布對象匹配,則將焦點移動到顯示列表中第一個可以接受光標輸入的畫布對象
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
gettags(item)
-- 返回與 item 相關聯的所有 Tags
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
icursor(item, index)
-- 將光標移動到 item 指定的畫布對象
-- 這里要求 item 指定的畫布對象支持文本輸入和轉移焦點
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
index(item, index)
-- 返回 index 在指定 item 中的位置(沿用 Python 的慣例:0 表示第一)
-- index 參數可以是:"insert"(當前光標的位置),"end"(最后一個字符的位置),"sel_first"(當前選中文本的起始位置),"sel_last"(當前選中文本的結束位置),還可以使用格式為 "@x, y"(x 和 y 是畫布坐標系)來獲得與此坐標最接近的位置
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
insert(item, index, text)
-- 在允許進行文本編輯的畫布對象的指定位置插入文本
-- index 參數可以是:"insert"(當前光標的位置),"end"(最后一個字符的位置),"sel_first"(當前選中文本的起始位置),"sel_last"(當前選中文本的結束位置),還可以使用格式為 "@x, y"(x 和 y 是畫布坐標系)來獲得與此坐標最接近的位置
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
itemcget(item, option)
-- 獲得指定 item 的選項的當前值
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
itemconfig(item, **options)
-- 修改指定 item 的選項的當前值
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
itemconfigure(item, **options)
-- 跟 itemconfig() 一樣
lift(item, **options)
-- 將指定畫布對象移動到顯示列表的頂部
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
-- 跟 tag_raise 一樣
lower(item, **options)
-- 將指定畫布對象移動到顯示列表的底部
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
-- 跟 tag_lower 一樣
move(item, dx, dy)
-- 將 item 移動到新位置(x, y)
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
postscript(**options)
-- 將 Canvas 的當前內容封裝成 PostScript 格式(什么是 PostScript)表示
-- 下方表格列舉了各個 options 選項的具體含義:
選項 含義
colormode 該選項的值可以是:'color'(顏色輸出),'gray'(灰階輸出)和 'mono'(黑白輸出)
file 1. 該選項指定一個文件,將 PostScript 寫入該文件中
2. 如果忽略該選項,PostScript 將以字符串的形式返回
height 1. 指定要打印的 Canvas 組件的高度
2. 默認值是 Canvas 組件的整體高度
rotate 1. 如果該選項的值為 False,該頁面將以縱向呈現
2. 如果該選項的值為 True,該頁面將以橫向呈現
x 開始打印的最左邊位置,以畫布坐標系表示
y 開始打印的最頂端位置,以畫布坐標系表示
width 1. 指定要打印的 Canvas 組件的寬度
2. 默認值是 Canvas 組件的整體寬度
scale(item, xOrigin, yOrigin, xScale, yScale)
-- 縮放 item 指定的畫布對象
-- xOrigin 和 yOrigin 決定要縮放的位置
-- xScale 和 yScale 決定縮放的比例
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
-- 注意:該方法無法縮放 Text 畫布對象
scan_dragto(x, y)
-- 見下方 scan_mark(x, y)
scan_mark(x, y)
-- 使用這種方式來實現 Canvas 內容的滾動
-- 需要將鼠標按鈕事件及當前鼠標位置綁定到 scan_mark(x, y) 方法,然后再將 <motion> 事件及當前鼠標位置綁定到 scan_dragto(x, y) 方法,就可以實現 Canvas 在當前位置和 sacn_mack(x, y) 指定的位置 (x, y) 之間滾動
select_adjust(item, index)
-- 調整選中范圍,使得給定的 index 參數指定的位置在范圍內
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
select_clear()
-- 取消 Canvas 組件中所有選中的范圍
select_from(item, index)
-- 調整選中范圍的起始位置為 index 參數指定的位置
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
select_item()
-- 范圍在 Canvas 組件中當前文本的選中范圍
-- 如果沒有則返回 None
select_to(item, index)
-- 調整選中范圍的結束位置為 index 參數指定的位置
tag_bind(item, event=None, callback, add=None)
-- 為 Canvas 組件上的畫布對象綁定方法
-- event 參數是綁定的事件名稱,callback 是與之關聯的方法
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
-- 注意:與綁定事件關聯的是畫布對象,而不是 Tag
tag_lower(item)
-- 將一個或多個畫布對象移至底部
-- 如果是多個畫布對象,將它們都移至底部並保留原有順序
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
-- 注意:該方法對窗口組件無效,請使用 lower 代替
tag_raise(item)
-- 將一個或多個畫布對象移至頂部
-- 如果是多個畫布對象,將它們都移至頂部並保留原有順序
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
-- 注意:該方法對窗口組件無效,請使用 lift 代替
tag_unbind(item, event, callback=None)
-- 解除與 item 綁定的事件
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
tkraise(item, **options)
-- 將指定畫布對象移動到顯示列表的頂部
-- item 可以是單個畫布對象的 ID,也可以是某個 Tag
-- 跟 tag_raise 一樣
type(item)
-- 返回指定畫布對象的類型
-- 返回值可以是:"arc", "bitmap", "image", "line", "oval", "polygon", "rectangle", "text", 或 "window"
xview(*args)
-- 該方法用於在水平方向上滾動 Canvas 組件的內容,一般通過綁定 Scollbar 組件的 command 選項來實現(具體操作參考:Scrollbar)
-- 如果第一個參數是 "moveto",則第二個參數表示滾動到指定的位置:0.0 表示最左端,1.0 表示最右端
-- 如果第一個參數是 "scroll",則第二個參數表示滾動的數量,第三個參數表示滾動的單位(可以是 "units" 或 "pages"),例如:xview("scroll", 3, "units") 表示向右滾動三行
xview_moveto(fraction)
-- 跟 xview("moveto", fraction) 一樣
xview_scroll(number, what)
-- 跟 xview("scroll", number, what) 一樣
yview(*args)
-- 該方法用於在垂直方向上滾動 Canvas 組件的內容,一般通過綁定 Scollbar 組件的 command 選項來實現(具體操作參考:Scrollbar)
-- 如果第一個參數是 "moveto",則第二個參數表示滾動到指定的位置:0.0 表示最頂端,1.0 表示最底端
-- 如果第一個參數是 "scroll",則第二個參數表示滾動的數量,第三個參數表示滾動的單位(可以是 "units" 或 "pages"),例如:yview("scroll", 3, "pages") 表示向下滾動三頁
yview_moveto(fraction)
-- 跟 yview("moveto", fraction) 一樣
yview_scroll(number, what)
-- 跟 yview("scroll", number, what) 一樣
原文鏈接:https://blog.csdn.net/qq_41556318/article/details/85272026