axipy.gui

Модуль пользовательского интерфейса.

В данном модуле содержатся классы связанные с пользовательским интерфейсом.

axipy.gui.view_service

Экземпляр менеджера содержимого окон.

Type

ViewService

axipy.gui.selection_service

Экземпляр доступа к выделенным объектам.

Type

SelectionService

Инструмент окна карты - MapTool

class axipy.gui.MapTool

Инструмент окна карты.

При создании своего инструмента новый инструмент наследуется от этого класса, и переопределяет необходимые обработчики событий.

PassEvent

Передать событие дальше. Значение False.

Type

bool

BlockEvent

Прекратить обработку события. Значение True.

Type

bool

Пример:

MyTool(MapTool):

    def mousePressEvent(self, event):
        print('mouse pressed')
        return self.PassEvent
keyPressEvent(event)

Обрабатывает событие нажатия клавиши клавиатуры.

Параметры

event (QKeyEvent) – Событие нажатия клавиши клавиатуры.

Тип результата

bool

Результат

PassEvent, чтобы пропустить событие дальше по цепочке обработчиков. Или BlockEvent, чтобы блокировать дальнейшую обработку события.

keyReleaseEvent(event)

Обрабатывает событие отпускания клавиши клавиатуры.

Параметры

event (QKeyEvent) – Событие отпускания клавиши клавиатуры.

Тип результата

bool

Результат

PassEvent, чтобы пропустить событие дальше по цепочке обработчиков. Или BlockEvent, чтобы блокировать дальнейшую обработку события.

mouseDoubleClickEvent(event)

Обрабатывает событие двойного клика мыши.

Параметры

event (QMouseEvent) – Событие двойного клика мыши.

Тип результата

bool

Результат

PassEvent, чтобы пропустить событие дальше по цепочке обработчиков. Или BlockEvent, чтобы блокировать дальнейшую обработку события.

mouseMoveEvent(event)

Обрабатывает событие перемещения мыши.

Параметры

event (QMouseEvent) – Событие перемещения мыши.

Тип результата

bool

Результат

PassEvent, чтобы пропустить событие дальше по цепочке обработчиков. Или BlockEvent, чтобы блокировать дальнейшую обработку события.

mousePressEvent(event)

Обрабатывает событие нажатия клавиши мыши.

Параметры

event (QMouseEvent) – Событие нажатия клавиши мыши.

Тип результата

bool

Результат

PassEvent, чтобы пропустить событие дальше по цепочке обработчиков. Или BlockEvent, чтобы блокировать дальнейшую обработку события.

mouseReleaseEvent(event)

Обрабатывает событие отпускания клавиши мыши.

Параметры

event (QMouseEvent) – Событие отпускания клавиши мыши.

Тип результата

bool

Результат

PassEvent, чтобы пропустить событие дальше по цепочке обработчиков. Или BlockEvent, чтобы блокировать дальнейшую обработку события.

paintEvent(event, painter)

Обрабатывает событие отрисовки.

Параметры
  • event (QPaintEvent) – Событие отрисовки.

  • painter (QPainter) – QPainter для рисования поверх виджета

Тип результата

None

to_scene(device)

Переводит точки из координат окна(пикселей) в координаты на карте.

Параметры

device (Union[Pnt, Rect, QRectF, QPointF, QLineF, QPolygonF]) – Точки в координатах окна.

Тип результата

Union[Pnt, Rect, QRectF, QPointF, QLineF, QPolygonF]

Результат

Точки в координатах карты.

property view

Отображение данных в окне.

Тип результата

View

wheelEvent(event)

Обрабатывает событие колеса мыши.

Параметры

event (QWheelEvent) – Событие колеса мыши.

Тип результата

bool

Результат

PassEvent, чтобы пропустить событие дальше по цепочке обработчиков. Или BlockEvent, чтобы блокировать дальнейшую обработку события.

Базовый класс для отображения данных в окне - View

digraph geometry { node [shape="box", style=filled, fillcolor="lightgray"] View [ href="#ref-label-view-class" ]; TableView [ href="#ref-label-tableview-class" ]; MapView [ href="#ref-label-mapview-class" ]; View -> TableView; View -> MapView; }
class axipy.gui.View

Базовый класс для отображения данных в окне.

property title

Заголовок окна просмотра.

Тип результата

str

property widget

Виджет, соответствующий содержимому окна.

Тип результата

QWidget

Результат

Qt5 виджет содержимого.

Таблица просмотра атрибутивной информации - TableView

class axipy.gui.TableView

Базовые классы: axipy.gui.View

Таблица просмотра атрибутивной информации. Для создание экземпляра необходимо использовать axipy.gui.ViewService.create_tableview() через экземпляр view_service

property data_object

Таблица, на основании которой создается данное окно просмотра.

Тип результата

DataObject

Результат

Таблица.

Окно просмотра карты - MapView

class axipy.gui.MapView

Базовые классы: axipy.gui.View

Окно просмотра карты. Используется для проведения различных манипуляций с картой. Для создание экземпляра необходимо использовать axipy.gui.ViewService.create_mapview() через экземпляр view_service (пример см. ниже).

Примечание

При создании „MapView“ посредством axipy.gui.ViewService.create_mapview() производится клонирование экземпляра карты axipy.render.Map и для последующей работы при доступе к данному объекту необходимо использовать свойство map.

Свойство device_rect определяет размер самого окна карты, а свойство scene_rect - прямоугольную область, которая умещается в этом окне в СК карты.

Преобразование между этими двумя прямоугольниками производится с помощью матриц трансформации scene_to_device_transform и device_to_scene_transform.

До параметров самой карты можно доступиться через свойство map.

Рассмотрим пример создания карты с последующим помещением ее в окно ее просмотра. Далее, попробуем преобразовать объект типа полигон из координат окна экрана в координаты СК слоя посредством axipy.da.Geometry.affine_transform().

# Откроем таблицу, создадим на ее базе слой и добавим в карту
table_world = io.openfile('world.tab')
world = Layer.create(table_world)
map = Map([ world ])
# Для полученной карты создадим окно просмотра
mapview = view_service.create_mapview(map)
# Выведем полученные параметры отображения
print('Прямоугольник экрана:', mapview.device_rect)
print('Прямоугольник карты:', mapview.scene_rect)

>>> Прямоугольник экрана: (0.0 0.0) (300.0 200.0)
>>> Прямоугольник карты: (-16194966.287183324 -8621185.324024437) (16789976.633236416 8326222.646170927)
#Создадим геометрический объект полигон в координатах экрана и преобразуем его в СК карты
poly_device = Polygon([(100,100), (100,150), (150, 150), (150,100)])
# Используя матрицу трансформации, преобразуем его в координаты карты.
poly_scene = poly_device.affine_transform(mapview.device_to_scene_transform)
# Для контроля выведем полученный полигон в виде WKT
print('WKT:', poly_scene.wkt)

>>> WKT: POLYGON ((-5199985.31371008 -147481.338926755, -5199985.31371008 -4384333.3314756, 297505.173026545 -4384333.3314756, 297505.173026545 -147481.338926755, -5199985.31371008 -147481.338926755))
property coordsystem

Система координат карты.

Тип результата

CoordSystem

property coordsystem_changed

Сигнал о том, что система координат изменилась.

Пример:

layer_world = Layer.create(table_world)
map = Map([ layer_world ])
mapview = view_service.create_mapview(map)
mapview.coordsystem_changed.connect(lambda: print('CS was changed'))
csLL = CoordSystem.from_prj("1, 104")
mapview.coordsystem = csLL

>>> CS was changed
Тип результата

Signal

property device_rect

Видимая область в координатах окна (пиксели).

Тип результата

Rect

Результат

Прямоугольник в координатах окна.

property device_to_scene_transform

Объект трансформации из координат окна в координаты карты.

Тип результата

QTransform

Результат

Объект трансформации.

property editable_layer

Редактируемый слой на карте.

Тип результата

Optional[VectorLayer]

Результат

Редактируемый слой. Если не определен, возвращает None.

property editable_layer_changed

Сигнал о том, что редактируемый слой сменился.

Тип результата

Signal

property map

Объект карты.

Тип результата

Map

Результат

Карта.

property scene_rect

Видимая область в координатах карты (в единицах измерения СК).

Тип результата

Rect

Результат

Прямоугольник в координатах карты.

property scene_to_device_transform

Объект трансформации из координат карты в координаты окна.

Тип результата

QTransform

Результат

Объект трансформации.

Доступ к выделенным объектам - SelectionService

class axipy.gui.SelectionService

Класс доступа к выделенным объектам.

Примечание

Получить экземпляр сервиса можно в атрибуте axipy.gui.selection_service.

add(table, ids)

Добавляет выборку записи таблицы по их идентификаторам.

Параметры
  • table (Table) – Таблица.

  • ids (Union[List[int], int]) – Идентификаторы записей.

property changed

Signal[] Выделение было изменено.

Тип результата

Signal

clear()

Очищает выборку.

property count

Размер выделения, то есть количество выделенных записей (количество элементов в списке идентификаторов).

Тип результата

int

get_as_cursor()

Возвращает выборку в виде итератора по записям.

Пример:

for f in selection_service.get_as_cursor():
    print('Feature id={}. Страна={}'.format(f.id, f['Страна']))
Тип результата

Iterator[Feature]

get_as_table()

Возвращает выборку в виде таблицы. Содержимое таблицы основывается на текущей выборке на момент вызова данного метода. При последующем изменении или сбросе выборки контент данной таблицы не меняется. Результирующей таблице присваивается наименование в формате data*, которое в последствии можно изменить. При закрытии базовой таблицы данная таблицы так-же закрывается.

Пример:

# Получаем таблицу из выборки.
tbl = selection_service.get_as_table()
# Задаем желаемое имя таблицы (необязательно)
tbl.name = 'my_table'
# Регистрация в каталоге (необязательно)
app.mainwindow.catalog().add(tbl)
for f in tbl.items():
    print('Feature id={}. Страна={}'.format(f.id, f['Страна']))
Тип результата

Table

property ids

Список идентификаторов выделенных записей.

Тип результата

List[int]

remove(tbl, ids)

Удаляет из выборки записи таблицы по их идентификаторам.

Параметры
  • tbl (Table) – Таблица.

  • ids (Union[List[int], int]) – Идентификаторы записей.

set(table, ids)

Создать выборку из записей таблицы по их идентификаторам.

Параметры
  • table (Table) – Таблица.

  • ids (Union[List[int], int]) – Идентификаторы записей.

property table

Таблицу, являющаяся источником текущего выделения.

Тип результата

Table

Менеджер содержимого окон - ViewService

class axipy.gui.ViewService

Менеджер содержимого окон.

Примечание

Используйте готовый экземпляр этого класса view_service.

Пример использования
1
2
3
table = io.openfile(filepath)
m = Map([table])
view_service.create_mapview(m)
activate(view)

Делает заданное окно активным.

Параметры

view (View) – Содержимое окна.

property active

Текущее активное окно.

Тип результата

Optional[View]

Результат

None, если нет активных окон.

property active_changed

Signal[] Активное окно изменилось.

Тип результата

Signal

close(view)

Закрывает окно.

Параметры

view (View) – Содержимое окна.

property count

Количество окон.

Тип результата

int

property count_changed

Signal[] Количество окно изменилось.

Тип результата

Signal

create_mapview(map)

Создает окно из для переданного объекта карты.

Параметры

map (Map) – Карта.

Примечание

Переданная карта копируется.

Тип результата

MapView

Результат

Окно карты.

create_tableview(table)

Создает окно в виде табличного представления из объекта данных.

Параметры

table (Table) – Таблица.

Тип результата

TableView

Результат

Окно таблицы.

property views

Список всех известных окон.

Тип результата

List[View]

Диалог выбора СК - ChooseCoordSystemDialog

class axipy.gui.ChooseCoordSystemDialog(coordsystem)

Диалог выбора координатной системы.

chosenCoordSystem()

Возвращает выбранную в диалоге систему координат.

Тип результата

CoordSystem

Кнопка выбора стиля - StyledButton

class axipy.gui.StyledButton(style, parent=None)

Кнопка, отображающая стиль и позволяющая его менять

Примечание

Сигнал styleChanged испускается при смене стиля.

Пример добавления кнопки на диалог:

style = Style.from_mapinfo("Pen (1, 2, 8421504)  Brush (2, 255, 0)")

class Dialog(QDialog):
    def __init__(self, parent = None):
        QDialog.__init__(self, parent)
        self.pb = StyledButton( style, self)
        self.pb.styleChanged.connect(self.styleResult)
        self.pb.setGeometry(100, 100, 100, 50)

    def styleResult(self):
        print('Стиль изменен', self.pb.style())

dialog = Dialog()
dialog.exec()
style()

Результирующий стиль.

Тип результата

Style

Рабочее пространство - Workspace

class axipy.gui.Workspace(catalog)

Рабочее пространство для сохранения текущего состояния.

Примечание

Данный класс следует использовать в случае, когда отсутствует главное окно приложения axipy.app.MainWindow для сохранения или чтения текущего состояния. Если же главное окно присутствует, то можно воспользоваться методами axipy.app.MainWindow.load_workspace() для чтения и axipy.app.MainWindow.save_workspace() для записи рабочего пространства.

Рабочее пространство можно как сохранять в файл так и читать из него. При чтении из файла рабочего пространства посредством метода load_file() все источники данных (таблицы) открываются и добавляются в переданный в конструктор каталог axipy.da.DataCatalog, а окна с наполнением добавляются в менеджер окон axipy.gui.ViewService, доступный через переменную view_service.

В случае записи текущего состояния в файл рабочего пространства последовательность обратная рассмотренной. Состояние каталога и менеджера окон записывается в рабочее пространство посредством метода save_file().

Параметры

catalog (DataCatalog) – Каталог с данными.

Пример чтения данных:

catalog = DataCatalog()
print('Before: tables({}), views({})'.format(len(catalog), len(view_service)))
ws = Workspace(catalog)
ws.load_file('ws.mws')
print('After: tables({}), views({})'.format(len(catalog), len(view_service)))

>>> Before: tables(0), views(0)
>>> After: tables(5), views(3)

Пример записи рабочего пространства:

catalog = DataCatalog()
...
ws = Workspace(catalog)
ws.save_file('ws_out.mws')
load_file(fileName)

Читает из файла рабочего пространства и заносит данные в текущее окружение.

Параметры

fileName (str) – Наименование входного файла.

save_file(fileName)

Сохраняет текущее состояние в файл рабочего пространства.

Параметры

fileName (str) – Наименование выходного файла.