Tkinter 畫線

Salman Mehmood 2023年1月30日
  1. 使用 create_line() 方法在 Tkinter 的畫布中建立一條線
  2. 在 Tkinter 中繪製沒有畫布的線條
  3. 在 Tkinter 網格中畫線
  4. 在 Tkinter 中的影象上畫線
Tkinter 畫線

Tkinter Canvas 元件可用於多種用途,例如繪製形狀和物件或建立圖形和影象。我們可以用它來繪製幾個元件:線條、圓弧點陣圖、影象、矩形、文字、橢圓、多邊形、矩形等等。

這個演示將探索一旦我們初始化 Tkinter 和 canvas 類,如何在 Tkinter 中繪製不同型別的線條。

使用 create_line() 方法在 Tkinter 的畫布中建立一條線

我們可以畫兩種線;這些簡單而虛線。有一個選項可以使用 dash 屬性指定虛線。

create_line() 將座標和方向作為引數,例如 'x1,y1,x2,y2'

from tkinter import *

# Initialize an instance of tkinter window
root = Tk()
# Set the width and height of the tkinter window
root.geometry("600x300")
# Create a canvas widget
canvas = Canvas(root, width=500, height=300)
canvas.pack()
# Create a line in canvas widget
canvas.create_line(10, 25, 200, 200, width=5)
# Create a dashed line
canvas.create_line(210, 25, 410, 200, fill="red", dash=(10, 5), width=2)
root.mainloop()

fill 屬性也是可選的。如果我們不設定顏色,則預設情況下該行將填充黑色。

我們使用了 dash 屬性,它有兩個引數:寬度和高度。

你可以看到帶有兩行的輸出視窗。

建立線法

在 Tkinter 中繪製沒有畫布的線條

這是一個事實,在 Tkinter 上畫線沒有標準用途,而不是畫布。

如果你只需要一條直線作為分隔符,則可以使用畫素寬度的框架。

from tkinter import *

# # Initialize an instance of tkinter window
root = Tk()
# Create a vertical Frame
vertical = Frame(root, bg="red", height=50, width=1)
# Create a horizontal Frame
horizontal = Frame(root, bg="blue", height=1, width=70)
vertical.place(x=10, y=10)
horizontal.place(x=50, y=30)
root.mainloop()

place() 方法是接受兩個引數(開始、結束)點的位置持有者。

沒有畫布

在 Tkinter 網格中畫線

現在我們將看到如何在網格中建立一條線。

一旦我們初始化 Separator() 類並使用 grid 元件將其設定在網格中,Separator 需要兩個引數:window 和 orient。

orient 引數採用一個值,垂直/水平。

from tkinter import *
from tkinter.ttk import Separator, Style

root = Tk()
# Create the left frame
left_frame = Frame(root, bg="blue", width=100, height=100)
left_frame.pack_propagate(False)
left_label = Label(
    left_frame, text="Left_frame", fg="white", bg="blue", anchor="center"
)
left_label.pack()
# Set frame in the grid
left_frame.grid(column=2, row=1, pady=5, padx=10, sticky="n")
sp = Separator(root, orient="vertical")
sp.grid(column=3, row=1, sticky="ns")
# edit: To change the color of the separator, you need to use a style
style = Style(root)
style.configure("TSeparator", background="red")
right_frame = Frame(root, bg="blue", width=100, height=100)
right_frame.pack_propagate(False)
right_label = Label(right_frame, text="Right_frame", fg="white", bg="blue")
right_label.pack()
right_frame.grid(column=4, row=1, pady=5, padx=10, sticky="n")
root.mainloop()

Style() 類有助於設定整個視窗的樣式。

樣式 tkinter 網格

pack_propagate() 元件採用布林引數。這個元件將擴充套件與內容對應的框架。

# left_frame.pack_propagate(False)
left_frame.pack_propagate()
# right_frame.pack_propagate(False)
right_frame.pack_propagate()

你可以比較以前和當前的輸出。False 引數有助於防止,預設情況下,引數為 True

注意
pack() 元件與 grid() 元件一起使用時會產生錯誤。

包裝 tkinter 網格

在 Tkinter 中的影象上畫線

有時我們需要在影象上畫線,畫布有一個 create_image() 方法可以在畫布上繪製影象,我們可以使用 create_line() 繪製線,如上所述。

from tkinter import *
from PIL import Image, ImageTk

root = Tk()
canvas = Canvas(root)
bg_image = Image.open("stop.png")
bg_image = bg_image.resize((300, 205), Image.ANTIALIAS)
bg_image = ImageTk.PhotoImage(bg_image)
canvas.pack(fill=BOTH, expand=1)
bg_img = canvas.create_image(0, 0, anchor=NW, image=bg_image)
line = canvas.create_line(20, 10, 150, 60, fill="red", width=5)
root.title("stop")
root.mainloop()

你可以在影象中看到紅線。

在影象上畫線

作者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn