Удаление прямоугольника с фигуры

weamagic

Пользователь
Пользователь
Июл 11, 2020
149
13
18
Win 7, Python 3.8
Добрый день. Рисую на объекте Figure различные фигуры, в том числе прямоугольники. Иногда некоторые из них требуется удалить, не удаляя остальные. Подскажите, как можно выполнить данную операцию, не методом тыка? Для рисования использую следующий код:
Python:
    class test_win(QtWidgets.QMainWindow, test_ev.Ui_MainWindow):

    def __init__(self):
        super().__init__()
        self.setupUi(self)  
        self.fig = Figure()
        self.x_area0 = []
        self.y_area0 = []
        self.ax = self.fig.add_subplot()
        self.can = FigureCanvasQTAgg(self.fig)
        self.test_box.addWidget(self.can)
        self.tools = NavigationToolbar2QT(self.can, self)
        self.test_box.addWidget(self.tools)
        self.fig.canvas.mpl_connect('button_press_event', self.pr_coord_mouse)
        self.fig.canvas.mpl_connect('button_release_event', self.create_graph)
       
    def cleaner_xy_area(self):
        if len(self.x_area0) > 0:
            self.x_area0 = []
            self.y_area0 = []

    def pr_coord_mouse(self, event):
        self.cleaner_xy_area()
        self.x_area0.append(event.xdata)
        self.y_area0.append(event.ydata)
       
    def create_graph(self, event):
        if len(self.x_area0) != 0:
        if self.rb_area.isChecked() == True:
            self.x_area0.append(event.xdata)
            self.y_area0.append(event.ydata)
            area = Rectangle((self.x_area0[0], self.y_area0[0]), 0, 0, fill=None)
            area.set_width(self.x_area0[1] - self.x_area0[0])
            area.set_height(self.y_area0[1] - self.y_area0[0])
            self.ax.add_patch(area)
            self.txt_time_top.setText("{:.2f}".format(self.y_area0[0] * dt))
            self.txt_time_bot.setText("{:.2f}".format(self.y_area0[1] * dt))
            self.txt_trace_left.setText("{:.0f}".format(self.x_area0[0]))
            self.txt_trace_right.setText("{:.0f}".format(self.x_area0[1]))
            self.fig.canvas.draw()
Такой вот код не сработал. Выдаёт ошибку: remove() takes 1 positional argument but 2 were given
Python:
    def lastik(self):
        x = self.ax.get_children()
        for i in x:
            if len(x) != 10:
                self.ax.remove(0)
        self.fig.canvas.draw()
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Можно попробовать сохранить фигуру при добавлении:
Python:
self.rectangle_patch = self.ax.add_patch(area)
а потом удалить ее из списка фигур:
Python:
self.rectangle_patch.remove()
# или
ax.patches.remove(self.rectangle_patch)
 

weamagic

Пользователь
Пользователь
Июл 11, 2020
149
13
18
Можно попробовать сохранить фигуру при добавлении:
Python:
self.rectangle_patch = self.ax.add_patch(area)
а потом удалить ее из списка фигур:
Python:
self.rectangle_patch.remove()
# или
ax.patches.remove(self.rectangle_patch)
Спасибо. Помогло.
 

Форум IT Специалистов