В настоящее время пытаюсь создать графический интерфейс с использованием Python. Я создаю программу для рисования фигур (похоже на Draw.io). Мне удалось создать круг в данный момент. Я застрял, пытаясь реализовать правильный инструмент удаления, в котором я нажимаю на инструмент удаления, а затем нажимаю на объект, который я хочу удалить из диаграммы.
Я пробовал широкий спектр методов, но не могу понять, как его запустить и запустить.
В данный момент я только что смог использовать правый клик, но я предпочитаю использовать кнопку / инструмент удаления, чтобы разрешить удаление левым кликом.
from tkinter import *
class DiagramGUI(Frame):
def __init__(self, master = None):
self.master = master
Frame.__init__(self, self.master)
self.glob_in = 0
self.canvas = Canvas(width = 1050, height = 578, bg='gray67', borderwidth=5, relief=RAISED)
self.canvas.pack(side=RIGHT)
self._drag_data = {"x": 0, "y": 0, "item": None}
self.canvas.tag_bind("shape", "<ButtonPress-1>", self.shape_press)
self.canvas.tag_bind("shape", "<B1-Motion>", self.shape_move)
self.canvas.tag_bind("shape", "<ButtonRelease-1>", self.shape_release)
circle_button = Button(master = None, text="Circle", command = self.create_shape, height = 3, width = 7)
circle_button.place(x = 0, y = 45)
self.delete_button = Button(master=None, text="Delete", command = self.canvas.tag_bind("shape", "<ButtonPress-3>", self.delete_shape))
self.delete_button.place(x = 72, y = 0)
def shape_press(self, event):
self._drag_data["item"] = self.canvas.find_closest(event.x, event.y)[0]
def shape_move(self, event):
delta_x = event.x - self._drag_data["x"]
delta_y = event.y - self._drag_data["y"]
print(self._drag_data['item'])
self.canvas.move(self._drag_data["item"], delta_x, delta_y)
self._drag_data["x"] = event.x
self._drag_data["y"] = event.y
def shape_release(self, event):
self._drag_data['item'] = None
self._drag_data['x'] = 0
self._drag_data['y'] = 0
def delete_shape(self, event):
self.canvas.delete(self.canvas.find_closest(event.x, event.y)[0])
def create_shape(self):
self.canvas.create_oval(100 - 25, 100 - 25, 150 + 25, 150 + 25,
outline = 'black', fill = 'blue', tags = "shape")
master = Tk()
master.geometry("1200x600")
master.resizable(width=False, height=False)
app = DiagramGUI(master)
app.mainloop()