Tkinter 画线

Salman Mehmood 2024年2月15日
  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