Запретить изменение размера ROI объекта

Рейтинг: 0Ответов: 0Опубликовано: 03.06.2023

Есть функция, которая создает круг и треугольник в реальных размерах. Необходимо, чтобы размеры этих фигур нельзя было изменять в окне программы.

Как сейчас выглядит программа:

Интерфейс

За квадраты можно изменить размер фигуры.

Вот сама функция:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout
from pyqtgraph import PlotWidget, ScatterPlotItem, TextItem, EllipseROI, PolyLineROI
from PyQt5.QtGui import QColor
import pyqtgraph as pg
from pyproj import Geod


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # Создание виджета сетки
        grid_widget = GridWidget()

        # Создание компоновщика и добавление виджетов
        layout = QGridLayout()
        layout.addWidget(grid_widget, 0, 0, 3, 1)

        # Создание центрального виджета и установка компоновщика
        central_widget = QWidget()
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)

        # Настройка главного окна
        self.setWindowTitle('Координатная сетка WS284 для GPS')
        self.setGeometry(100, 100, 800, 800)
        self.show()


class GridWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.geod = Geod(ellps='WGS84')
        _, _, self.metr = self.geod.inv(0, 0, 0.001, 0)
        # Координаты центра сетки
        center_latitude = 55.751244 * self.metr
        center_longitude = 37.618423 * self.metr
        self.boat = None
        self.circle = None

        self.boat_color = {
            'symbol': pg.mkPen('b'),
            'brush': pg.mkBrush('b')
        }
        self.point_color = {
            'symbol': pg.mkPen(color='r', width=2),  # Отключение обводки точки
            'brush': pg.mkBrush(None)  # Белая заливка точки
        }

        # Создание графика
        self.plot_widget = PlotWidget(background='lightgray')
        self.plot_widget.showGrid(x=True, y=True)
        self.plot_widget.setMenuEnabled(enableMenu=False)
        self.boat_latitude, self.boat_longitude = self.add_boat(
            center_latitude, center_longitude)

        # Создание компоновщика и добавление графика
        layout = QGridLayout()
        layout.addWidget(self.plot_widget, 0, 0, 1, 1)
        self.setLayout(layout)

    def add_boat(self, latitude:float, longitude:float):
        boat_size = self.metr
        self.boat = PolyLineROI([[latitude - boat_size/4, longitude - boat_size],
                                [latitude - boat_size/4, longitude],
                                [latitude, longitude + boat_size],
                                [latitude + boat_size/4, longitude],
                                [latitude + boat_size/4, longitude - boat_size],
                                 ],
                                closed=True, pen=self.boat_color['symbol'], movable=False, resizable=False, rotatable=False)
        self.plot_widget.addItem(self.boat)
        # Добавление круга вокруг точки
        radius = 5 * self.metr  # Радиус круга в метрах
        self.circle = EllipseROI([latitude - radius, longitude - radius], [radius * 2, radius * 2],
                                 pen=self.boat_color['symbol'], movable=False, resizable=False, rotatable=False)
        self.plot_widget.addItem(self.circle)
        self.circle.setParentItem(self.boat)
        return (latitude, longitude)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(app.exec_())

Ответы

Ответов пока нет.