Tkinter canvas-繪制線、矩形、文字、橢圓、圓、多邊形


  • 常用參數和函數
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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM