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()
类有助于设置整个窗口的样式。
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 中的图像上画线
有时我们需要在图像上画线,画布有一个 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()
你可以在图像中看到红线。
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