- 常用參數和函數
fill = 'xxx' # 填充xxx顏色 width = 'xxx' # 設置寬度或邊框寬度 outline = 'orange' # 設置邊框的顏色 canvas.itemcget(name, 'xxx') # 獲取組件name的xxx屬性 canvas.coords(name) # 獲取組件的橫坐標和縱坐標 canvas.coords(name, x1, y1, x2, y2) # 重新設置組件的橫坐標和縱坐標
- 繪制實線和虛線
from tkinter import * win = Tk() win.geometry('500x500+500+100') canvas = Canvas(win) canvas.pack(fill=BOTH, expand=True) # 畫實線,填充橙色 canvas.create_line(100, 100, 100, 200, fill='orange') # 畫實線,填充橙色,設置寬度為10 canvas.create_line(150, 100, 150, 200, fill='orange', width=10) # 畫虛線,填充橙色 canvas.create_line(200, 100, 200, 200, fill='orange', dash=(2, 2)) win.mainloop()
- 繪制矩形
from tkinter import * win = Tk() win.geometry('500x500+500+100') canvas = Canvas(win) canvas.pack(fill=BOTH, expand=True) # 畫矩形,填充橙色 canvas.create_rectangle(100, 100, 200, 200, fill='orange') # 畫矩形,填充橙色,設置邊框寬度為10 canvas.create_rectangle(250, 100, 350, 200, fill='orange', width=10) # 畫矩形,填充橙色,設置邊框是紅色 canvas.create_rectangle(400, 100, 450, 200, fill='orange', outline='red', width=2) win.mainloop()
- 繪制文字
from tkinter import * win = Tk() win.geometry('500x500+500+100') canvas = Canvas(win) canvas.pack(fill=BOTH, expand=True) # 畫文字 canvas.create_text(100, 100, text='文字') # 畫文字,填充橙色 canvas.create_text(200, 100, text='文字', fill='orange') win.mainloop()
- 繪制圓和橢圓
from tkinter import * win = Tk() win.geometry('500x500+500+100') canvas = Canvas(win) canvas.pack(fill=BOTH, expand=True) # 畫圓,填充橙色 canvas.create_oval(100, 100, 200, 200, fill='orange') # 畫橢圓,填充橙色,設置邊框寬度5,邊框顏色pink canvas.create_oval(200, 200, 300, 350, fill='orange', width=5, outline='pink') win.mainloop()
- 繪制多邊形
from tkinter import * win = Tk() win.geometry('500x500+500+100') canvas = Canvas(win) canvas.pack(fill=BOTH, expand=True) # 繪制多邊形,填充粉色 point = [(50, 50), (100, 50), (100, 100), (75, 150), (50, 100)] canvas.create_polygon(point, fill='pink', width=5, outline='orange') win.mainloop()
- 獲取組件的屬性
from tkinter import * win = Tk() win.geometry('500x500+500+100') canvas = Canvas(win) canvas.pack(fill=BOTH, expand=True) # 畫實線,填充橙色,寬度為10 line = canvas.create_line(150, 100, 150, 200, fill='orange', width=10) def event(): # 使用 itemcget 來獲取組件的屬性 fill = canvas.itemcget(line, 'fill') print(fill) width = canvas.itemcget(line, 'width') print(width) btn = Button(win, text='點擊獲取實線屬性', command=event) canvas.create_window((100, 50), window=btn) win.mainloop()
- 重新設置組件位置和組件屬性
from tkinter import * win = Tk() win.geometry('500x500+500+100') canvas = Canvas(win) canvas.pack(fill=BOTH, expand=True) # 畫實線,填充橙色,寬度為10 line = canvas.create_line(150, 100, 150, 200, fill='orange', width=10) def move_line(): # 使用 coords 來重新設置組件的位置 canvas.coords(line, 200, 100, 200, 200) btn = Button(win, text='點擊移動實線', command=move_line) # 使用 itemconfig 來重新設置組件的屬性 btn1 = Button(win, text='點擊切換實線填充顏色', command=lambda: canvas.itemconfig(line, fill='pink')) canvas.create_window((100, 50), window=btn) canvas.create_window((300, 50), window=btn1) win.mainloop()
- 移動組件
from tkinter import * win = Tk() win.geometry('500x500+500+100') canvas = Canvas(win) canvas.pack(fill=BOTH, expand=True) # 畫實線,填充橙色,寬度為10 line = canvas.create_line(150, 100, 150, 200, fill='orange', width=10) def move_line(): # 使用 coords 來重新設置組件的位置 canvas.coords(line, 200, 100, 200, 200) btn = Button(win, text='點擊移動實線', command=move_line) # 使用 move 移動組件,參數表示沿XY軸移動的距離 btn1 = Button(win, text='點擊移動實線2', command=lambda: canvas.move(line, 10, 0)) canvas.create_window((100, 50), window=btn) canvas.create_window((300, 50), window=btn1) win.mainloop()
- 刪除組件
from tkinter import * win = Tk() win.geometry('500x500+500+100') canvas = Canvas(win) canvas.pack(fill=BOTH, expand=True) # 畫實線,填充橙色 line = canvas.create_line(100, 100, 100, 200, fill='orange') # 畫實線,填充橙色,寬度為10 canvas.create_line(150, 100, 150, 200, fill='orange', width=10) # 畫虛線,填充橙色 canvas.create_line(200, 100, 200, 200, fill='orange', dash=(2, 2)) # 使用delete來刪除組件 canvas.create_window((250, 50), window=Button(text='刪除橙色實線', command=lambda x=canvas: x.delete(line))) # all 代表畫布的所有組件 canvas.create_window((150, 50), window=Button(text='刪除畫布所有組件', command=lambda x=canvas: x.delete('all'))) win.mainloop()