Создание функциональной кнопки удаления, которая позволяет удалять форму холста Tkinter с помощью щелчка левой кнопкой мыши? - PullRequest
0 голосов
/ 29 марта 2019

В настоящее время пытаюсь создать графический интерфейс с использованием 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()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...