畫布部件的建立及其選項
import tkinter as tk
parent = tk.Tk()
w = tk.Canvas(parent, option=value, ...)
bd or borderwidth | 邊框寬度, 預設值 2 點 |
bg or background | 背景色, 預設值 '#E4E4E4' 淡灰色 |
closeenough | 該距離以內都算該部件的範圍之內, float, 預設值 1.0 |
confine | 畫布無法在scrollregion之外滾動, 預設為 True |
cursor | 滑鼠懸停在畫布上時顯示的游標 |
height | 畫布的 Y 尺寸 |
highlightbackground | 非聚焦時高亮顏色 |
highlightcolor | 聚焦時高亮顏色 |
highlightthickness | 高亮厚度, 預設為 1 |
relief | 畫布的浮雕樣式,預設為 tk.FLAT/td> |
scrollregion | 畫布可以滾動的區域, tuple (left, top, right, bottom) |
selectbackground | 所選專案的背景色 |
selectborderwidth | 所選專案的邊框寬度 |
selectforeground | 所選專案的前景色 |
takefocus | TAB 鍵在畫布是否會迴圈焦點, 1 則會, 為空字串, 則僅在具有鍵繫結下迴圈焦點. |
width | 畫布的X尺寸 |
xscrollincrement | X 維度上的滾動單位,設定為 0, 則可以滾動到的任何位置 |
xscrollcommand | 水平滾動條 scrollbar.set() 方法 |
yscrollincrement | Y 維度上的滾動單位,設定為 0, 則可以滾動到的任何位置 |
yscrollcommand | 垂直滾動條 scrollbar.set() 方法 |
畫布的一些特性
- Coordinate 座標 - 左上角為 (0, 0), 右為正的 X 軸, 下為正的 Y 軸.
- Display list 顯示列表 - 順序為從背景到前景, 新專案加到列表的頂端.
- Object ID 專案識別碼 - 唯一的整數
- Tags 標籤名 - string, 可以代表沒有或有一個以上的專案, 一個專案可以沒有或有一個以上的標籤. 標籤用來代表其所有的專案, 可以用來一次設定其相闗的動作.
- tagOrId 標籤名或專案識別碼
- integer 代表一個專案的識別碼
- string, 代表相關專案的標籤名
畫布中專案
import tkinter as tk
canvas = Tk.Canvas(...)
- Arc 弧形
(x0, y0) 為區域的左上角, (x1, y1) 為區域的右下角, 弧就以該區域作為其範圍.
id_ = canvas.create_arc(x0, y0, x1, y1, option, ...)
- Bitmap 點陣
(x, y) 為點陣圖的參考位置座標, 參考的定位由選項 anchor 而定.
id_ = canvas.create_bitmap(x, y, *options)
- Image 圖片
(x, y) 為圖片的參考位置座標, 參考的定位由選項 anchor 而定.
id_ = canvas.create_image(x, y, *options)
- Line 線段
(x0, y0), (x1, y1), …, (xn, yn) 為各線段中的點, 兩點間為直線.
id_ = canvas.create_line(x0, y0, x1, y1, ..., xn, yn, option, ...)
- Oval 橢圓
(x0, y0) 為區域的左上角, (x1, y1) 為區域的右下角(不含), 弧就以該區域作為其範圍.
id_ = canvas.create_oval(x0, y0, x1, y1, option, ...)
- Polygon 多邊形
(x0, y0), (x1, y1), … 為多邊形的各端點.
id_ = canvas.create_polygon(x0, y0, x1, y1, ..., option, ...)
- Rectangle 矩形
(x0, y0), (x1, y1) 外框與內部含 (x0, y0), 外框含 (x1, y1), 內部不含 (x1, y1), 外框為主.
id_ = canvas.create_rectangle(x0, y0, x1, y1, option, ...)
選項 & 說明 | 弧形 | 點陣 | 圖片 | 線段 | 橢圓 | 多邊 | 矩形 | 本文 | 視窗 |
---|---|---|---|---|---|---|---|---|---|
activebackground active時, 顏色 0 的顏色, 內定空字串(透明) |
✔ | ||||||||
activebitmap active 點陣圖 |
✔ | ||||||||
activedash active 點線樣式 |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
activefill active 區域的填色 |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
activeforeground active 顏色 1 的顏色, 內定空字串(黑色) |
✔ | ||||||||
activeimage active 圖片 |
✔ | ||||||||
activeoutline active 線顏色, 內定空字串(黑色) |
✔ | ✔ | ✔ | ✔ | |||||
activeoutlinestipple active 線的點陣圖, 內定空字串(黑色) |
✔ | ✔ | ✔ | ✔ | |||||
activestipple active 區域的點陣圖, 內定空字串(黑色) |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
activewidth active 線的寛度, 內定為 1 點素. |
✔ | ✔ | ✔ | ✔ | ✔ | ||||
anchor 定位方式, 內定為CENTER |
✔ | ✔ | ✔ | ✔ | |||||
arrow 線端的箭頭, 內定無/FIRST/LAST/BOTH |
✔ | ||||||||
arrowshape 箭頭圖形的三邊長 (d1, d2, d3) |
✔ | ||||||||
background 顏色值為 0 的顏色, 內定空字串(透明) |
✔ | ||||||||
bitmap 所使用的點陣圖 |
✔ | ||||||||
capstyle 線端的樣式, 內定為 BUTT. |
✔ | ||||||||
dash 點線樣式 |
✔ | ✔ | ✔ | ✔ | ✔ | ||||
dashoffset 點線起始間隔 |
✔ | ✔ | ✔ | ✔ | ✔ | ||||
disabledbackground disabled 顏色值為 0 的顏色, 內定空字串(透明) |
✔ | ||||||||
disabledbitmap disabled 點陣圖. |
✔ | ||||||||
disableddash disabled 點線樣式 |
✔ | ✔ | ✔ | ✔ | ✔ | ||||
disabledfill disabled 區域的填色, 內定空字串(透明) |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
disabledforeground disabled 顏色值為 1 的顏色, 內定空字串(黑色) |
✔ | ||||||||
disabledimage disabled 圖片 |
✔ | ||||||||
disabledoutline disabled 線顏色, 內定空字串(黑色) |
✔ | ✔ | ✔ | ✔ | |||||
disabledoutlinestipple disabled 線的點陣圖, 內定空字串(黑色) |
✔ | ✔ | ✔ | ✔ | |||||
disabledstipple disabled 區域的點陣圖, 內定空字串(黑色) |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
disabledwidth disabled 線寛, 內定為 1 點素. |
✔ | ✔ | ✔ | ✔ | ✔ | ||||
extent 逆時針所涵蓋的角度 |
✔ | ||||||||
fill 區域的填色, 內定空字串(透明) |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
font 文字字型 |
✔ | ||||||||
foreground 顏色值為 1 的顏色, 內定空字串(黑色) |
✔ | ||||||||
height 區域的高度 |
✔ | ||||||||
image 使用的圖片. |
✔ | ||||||||
joinstyle 線轉角的樣式, 內定為 ROUND |
✔ | ✔ | |||||||
justify 多行文字的對方式, 內定為 LEFT |
✔ | ||||||||
offset 區域對齊的調整偏差 |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
outline 線顏色, 內定空字串(黑色) |
✔ | ✔ | ✔ | ✔ | |||||
outlineoffset 線對齊的調整偏差 |
✔ | ✔ | ✔ | ✔ | |||||
outlinestipple 線的點陣圖, 內定空字串(黑色) |
✔ | ✔ | ✔ | ✔ | |||||
smooth 兩點間的平滑方式, 內定False直線/True拋物線 |
✔ | ✔ | |||||||
splinesteps smooth=True, 每一線段以多少個子線段來組成. |
✔ | ✔ | |||||||
start 線的起始角度, x正軸開始, 未設定為整個橢圓形 |
✔ | ||||||||
state 狀態NORMAL內定/HIDDEN/DISABLED |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
stipple 區域的點陣圖, 內定空字串(黑色) |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
style 樣式, PIESLICE扇形/CHORD月形/ARC弧形 |
✔ | ||||||||
tags 設定標籤, 單一標籤 str 或多標籤的 tuple. |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
text 文字字串, 使用 ‘\n’ 分行 |
✔ | ||||||||
width 寛度, 內定為 1 點素. / 文字為字寛 |
✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
window 要置入的部件 |
✔ |
畫布部件有關專案的方法
方法 & 說明 |
---|
addtag_above(newTag, tagOrId) 在緊接 tagOrId 方的一個專案新增新標籤 |
addtag_all(newTag) 向 Canvas 上的所有專案新增新標籤 |
addtag_below(newTag, tagOrId) 在緊接 tagOrId 下方的一個專案新增新標籤 |
addtag_closest(newTag, x, y, halo=None, start=None) 將newTag 新增到最靠近螢幕座標(x, y) 的專案. 如果有多個專案, 則選擇較高的一個. halo 代表涵蓋的距離範圍, 專案限定在start 專案之下. |
addtag_enclosed(newTag, x1, y1, x2, y2) 對區域 (x1, y1), (x2, y2) 中完全涵蓋的所有專案新增 newTagAdd |
addtag_overlapping(newTag, x1, y1, x2, y2) 對區域 (x1, y1), (x2, y2) 中有交集的所有專案新增 newTagAdd |
addtag_withtag(newTag, tagOrId) 向 tagOrId 指定的所有專案新增 newTagAdd |
bbox(tagOrId=None) 取得 tagOrId 所有專案涵蓋的區域(x1, y1), (x2, y2), 如果沒有設定tagOrId , 則為畫布中所有的專案. |
canvasx(screenx, gridspacing=None) 將視窗座標 screenx 轉換為畫布座標,併為最近的網格間距 gridspacing 的整數倍. |
canvasy(screeny, gridspacing=None) 將視窗座標 screeny 轉換為畫布座標,併為最近的網格間距 gridspacing 的整數倍. |
coords(tagOrId, x0, y0, x1, y1, …, xn, yn) 返回 tagOrId 最下層專案的涵蓋範圍, 或/且移動專案到新的座標處 (x0, y0, x1, y1, .., xn, yn) |
dchars(tagOrId, first=0, last=first) 從 first 到last (含) 處, 刪除本文中的字串, 索引first 及last 為integer, 或end 代表最尾端處 |
delete(tagOrId) 刪除 tagOrId 中的專案 |
dtag(tagOrId, tagToDelete) 從 tagOrId 中刪除 tagToDelete 的專案 |
find_above(tagOrId) 返回緊接 tagOrId 上方的專案 ID , 無則返回空 tuple |
find_all() 返回畫布中所有的專案 |
find_below(tagOrId) 返回緊接 tagOrId 下方的專案 ID , 無則返回空 tuple |
find_closest(x, y, halo=None, start=None) 返回接近座標(x,y) 最上層的一個專案的tuple, halo 代表涵蓋的距離範圍, 專案限定在start 專案之下 |
find_enclosed(x1, y1, x2, y2) 返回在區域中 (x1, y1), (x2, y2) 完全被涵蓋的所有專案 |
find_overlapping(x1, y1, x2, y2) |
find_withtag(tagOrId) 返回 tagOrId 中所有的專案 |
focus(tagOrId=None) 聚焦於 tagOrId 第一個專案, 或者返回目前聚焦的專案, 如果沒有聚焦的專案, 則返回空字串 |
gettags(tagOrId) 返回 tagOrId 中最低專案的所有標籤 |
icursor(tagOrId, index) 設定可聚焦文字專案的插入游標位置索引 |
index(tagOrId, specifier) 返回 tagOrId 最下層文字專案的specifier 索引值, specifier :1. tk.INSERT - 目前的位置2. tk.END - 最後的位置.3. tk.SEL_FIRST - 選擇的起點, 沒有則出錯tk .TclError.4. tk.SEL_LAST - 選擇的終點, 沒有則出錯tk.TclError.5. "@x,y" - 在座標(x, y) 的索引 |
insert(tagOrId, specifier, text) 在 tagOrId 最下層文字專案中, 於 specifier 處插入字串 text |
itemcget(tagOrId, option) 返回 tagOrId 最下層專案的選項 option 值 |
itemconfigure(tagOrId, option, …) 設定或返回 tagOrId 最下層專案的選項 option 值 |
move(tagOrId, xAmount, yAmount) 移動 tagOrId 的專案, 位置偏移量為 xAmount , yAmount |
postscript(option, …) 以Encapsulated PostScript 格式返回畫布的內容, 選項options: colormode 色彩模式- color 彩色/gray 灰度/ mono 黑白,file - 儲存檔名, 沒有設定則返回字串height - 畫布高度rotate - 橫式(False) or 直式(True) 方向x - 列印的最左方座標y -列印的最上方座標width - 畫布寛度 |
scale(tagOrId, xOffset, yOffset, xScale, yScale) 以(xoffset, yoffset) 為參考點來縮放 tagOrId 中的專案, 縮放比率為xScale 及yScale , 文字專案不會縮放, 但位置可能會改變 |
scan_dragto(x, y, gain=10.0) 滑鼠鍵按下事件處理程式中已標記位置時, 滑鼠滾動事件處理程式拖弋捲動畫布, (x, y) 為位置, gain 為畫布捲動的速率,值越大越快 |
scan_mark(x, y) 滑鼠鍵按下事件處理程式中標記位置 (x, y) |
select_adjust(oid, specifier) 調整專案 oid 的文字選擇區以包含索引 specifier , 定位處也會重新設定 |
select_clear() 去除選擇 |
select_from(oid, specifier) 設定專案 oid 選擇區的起始索引處 specifier |
select_item() 返回目前選擇區的專案識別碼, 如果沒有選擇區, 則返回 None |
select_to(oid, specifier) 設定專案 oid 選擇區的停止索引處 specifier |
tag_bind(tagOrId, sequence=None, function=None, add=None) 繫結 tagOrId 專案sequence 事件的處理程式function , add 為'+' 代表新增處理程式, 否則將取代所有舊的程式. 繫結對新增或移除的專案沒有作用 |
tag_lower(tagOrId, belowThis) 在顯示列表中移動 tagOrId 中的專案到 aboveThis 下方, 座標位置不變 |
tag_raise(tagOrId, aboveThis) 在顯示列表中移動 tagOrId 中的專案到 aboveThis 上方, 座標位置不變 |
tag_unbind(tagOrId, sequence, funcId=None) 移除 tagOdID 專案對 sequence 事件的繫結函式 funcId |
type(tagOrId) 返回 tagOrId 中第一個專案的型別, arc , bitmap , image , line , oval , polygon , rectangle , text , 或window |
xview(tk.MOVETO, fraction) 供水平滾動條 scrollbar 選項command 使用, fraction 0.0 為最左處, 1.0 為右處 |
xview(tk.SCROLL, n, what) 水平滾動畫布 n 個單位, 單位what 為tk.UNITS 或tk.PAGES , < code>tk.UNITS 的大小由畫布的xscrollincrement 選項而定, tk.PAGES 的大小是畫布度的9/10 code> |
xview_moveto(fraction) 同 xview(tk.MOVETO, fraction) |
xview_scroll(n, what) 同 .xview(tk.SCROLL, n, what) |
yview(tk.MOVETO, fraction) 垂直滾動畫布, 類似 xview(tk.MOVETO,…) |
yview(tk.SCROLL, n, what) 垂直滾動畫布, 類似 xview(tk.SCROLL,…) |
yview_moveto(fraction) 垂直滾動畫布, 類似 xview() |
yview_scroll(n, what) 垂直滾動畫布, 類似 xview(), xview_moveto(), and xview_scroll() |
範例視窗及程式碼
import math
import tkinter as tk
root = tk.Tk(className="canvas demo")
canvas = tk.Canvas(root, bg='green', width=640, height=480)
canvas.grid()
r = 220
x_offset, y_offset = 20, 240
points = [(x+x_offset, r*math.sin(x/90*math.pi)+y_offset) for x in range(600)]
ids = [canvas.create_oval(x-1, y-1, x+1, y+1, fill='white', outline='white')
for x, y in points]
line = {'arrow':tk.LAST, 'fill':'yellow', 'width':4}
line_x = canvas.create_line(10, 240, 630, 240, **line)
line_y = canvas.create_line(20, 470, 20, 10, **line)
x_label = canvas.create_text(620, 250, anchor=tk.E, fill='yellow',
text='Degree')
y_label = canvas.create_text( 25, 90, anchor=tk.NW, fill='yellow',
text='Sin Curve', angle=90)
# angle option added for new version tkinter.
root.mainloop()
本作品採用《CC 協議》,轉載必須註明作者和本文連結