想要使用 Tkinter 通过光标调整形状(矩形)的大小

Want to resize shapes(Rectangle) by cursor using Tkinter

我成功地用鼠标绘制了矩形,但无法调整它的大小。 我通过调用函数尝试了多种使用事件的方法,但都失败了。

python 的新手如此挣扎。

谢谢

很少有错误 self.current = self.create_rectangle(*self.start, *self.start, width=5) 应该是 self.canvas.create_rectangle(*self.start, *self.start, width=5)

同样self.tag_bind应该是self.canvas.tag_bind

openFile 方法中删除 self.canvas.bind("<B1-Motion>", self.on_click)self.__init__(filename)

此外,不要忘记导入部分 (from functools import partial)

您可以在 self.canvas 上绑定的回调上调整大小,不需要在矩形项上绑定。

下面是一个简化的例子:

import tkinter as tk

class ExampleApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.canvas = tk.Canvas(self, width=512, height=512, cursor="cross")
        self.canvas.pack(fill="both", expand=1)
        self.canvas.bind("<Button-1>", self.on_button_press)
        self.canvas.bind("<B1-Motion>", self.on_move_press)

    def on_button_press(self, event):
        # find rectangle items under mouse cursor
        items = [x for x in self.canvas.find_withtag("current") if self.canvas.type(x) == "rectangle"]
        if items:
            # item found, use it as the "current" item
            self.start = self.canvas.coords(items[0])[:2]
            self.current = items[0]
        else:
            # no item found, create new "current" rectangle item
            self.start = event.x, event.y
            self.current = self.canvas.create_rectangle(*self.start, *self.start, width=5)

    def on_move_press(self, event):
        # resize the "current" item
        self.canvas.coords(self.current, *self.start, event.x, event.y)

ExampleApp().mainloop()