📜  在画布 tkinter 中用鼠标在图像上绘制框 - Python (1)

📅  最后修改于: 2023-12-03 15:08:04.232000             🧑  作者: Mango

在画布 tkinter 中用鼠标在图像上绘制框 - Python

在 tkinter 中,我们可以很方便地创建一个画布,然后使用鼠标在画布上进行绘制和交互。本文将介绍如何使用鼠标在画布上绘制矩形框,以及如何将矩形框的坐标信息输出到控制台。下面是完整代码和解释。

1. 导入必要的库
from tkinter import *

使用 tkinter 库中的所有对象和方法。

2. 创建画布
root = Tk()
canvas = Canvas(root, width=400, height=400, bg='white')
canvas.pack()

创建一个宽度为 400,高度为 400 的白色画布,并将其放置在窗口中。

3. 定义绘制矩形框的方法
def draw_rect(event):
    global rect, start_x, start_y
    if rect:
        canvas.delete(rect)
    start_x, start_y = event.x, event.y
    rect = canvas.create_rectangle(start_x, start_y, event.x, event.y, outline='red', width=2)

这个方法会在鼠标单击并拖动时被调用。它会创建一个矩形框,并将其保存到全局变量 rect 中。如果之前已经创建了一个矩形框,那么它会被删除。矩形框的左上角坐标为 (start_x, start_y),右下角坐标为 (event.x, event.y)。矩形框的边框颜色为红色,宽度为 2。

我们还定义了两个全局变量 start_x 和 start_y,用来保存当前矩形框的左上角坐标。

4. 定义输出矩形框信息的方法
def print_rect(event):
    global rect, start_x, start_y
    print(f'Rectangle: ({start_x}, {start_y}), ({event.x}, {event.y})')
    rect = None

这个方法会在鼠标释放时被调用。它会输出当前矩形框的坐标信息到控制台,并将全局变量 rect 设为 None,表示当前没有任何矩形框被创建。

5. 绑定鼠标事件
canvas.bind('<Button-1>', draw_rect)
canvas.bind('<ButtonRelease-1>', print_rect)

将鼠标左键按下事件绑定到 draw_rect() 方法,将鼠标左键释放事件绑定到 print_rect() 方法。

6. 运行程序
root.mainloop()

启动 tkinter 的消息循环,等待用户交互。

完整的代码如下:

from tkinter import *

def draw_rect(event):
    global rect, start_x, start_y
    if rect:
        canvas.delete(rect)
    start_x, start_y = event.x, event.y
    rect = canvas.create_rectangle(start_x, start_y, event.x, event.y, outline='red', width=2)

def print_rect(event):
    global rect, start_x, start_y
    print(f'Rectangle: ({start_x}, {start_y}), ({event.x}, {event.y})')
    rect = None

root = Tk()
canvas = Canvas(root, width=400, height=400, bg='white')
canvas.pack()

rect = None
start_x = None
start_y = None

canvas.bind('<Button-1>', draw_rect)
canvas.bind('<ButtonRelease-1>', print_rect)

root.mainloop()
7. 参考文献