📅  最后修改于: 2023-12-03 15:08:04.232000             🧑  作者: Mango
在 tkinter 中,我们可以很方便地创建一个画布,然后使用鼠标在画布上进行绘制和交互。本文将介绍如何使用鼠标在画布上绘制矩形框,以及如何将矩形框的坐标信息输出到控制台。下面是完整代码和解释。
from tkinter import *
使用 tkinter 库中的所有对象和方法。
root = Tk()
canvas = Canvas(root, width=400, height=400, bg='white')
canvas.pack()
创建一个宽度为 400,高度为 400 的白色画布,并将其放置在窗口中。
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,用来保存当前矩形框的左上角坐标。
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,表示当前没有任何矩形框被创建。
canvas.bind('<Button-1>', draw_rect)
canvas.bind('<ButtonRelease-1>', print_rect)
将鼠标左键按下事件绑定到 draw_rect() 方法,将鼠标左键释放事件绑定到 print_rect() 方法。
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()