Запретить изменение размера ROI объекта
Есть функция, которая создает круг и треугольник в реальных размерах. Необходимо, чтобы размеры этих фигур нельзя было изменять в окне программы.
Как сейчас выглядит программа:
За квадраты можно изменить размер фигуры.
Вот сама функция:
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_())
Источник: Stack Overflow на русском