axipy.gui¶
Модуль пользовательского интерфейса.
В данном модуле содержатся классы связанные с пользовательским интерфейсом.
-
axipy.gui.view_service¶ Экземпляр менеджера содержимого окон.
- Type
-
axipy.gui.selection_service¶ Экземпляр доступа к выделенным объектам.
- Type
Инструмент окна карты - MapTool¶
-
class
axipy.gui.MapTool¶ Инструмент окна карты.
При создании своего инструмента новый инструмент наследуется от этого класса, и переопределяет необходимые обработчики событий.
Пример:
MyTool(MapTool): def mousePressEvent(self, event): print('mouse pressed') return self.PassEvent
-
keyPressEvent(event)¶ Обрабатывает событие нажатия клавиши клавиатуры.
- Параметры
event (
QKeyEvent) – Событие нажатия клавиши клавиатуры.- Тип результата
- Результат
PassEvent, чтобы пропустить событие дальше по цепочке обработчиков. ИлиBlockEvent, чтобы блокировать дальнейшую обработку события.
-
keyReleaseEvent(event)¶ Обрабатывает событие отпускания клавиши клавиатуры.
- Параметры
event (
QKeyEvent) – Событие отпускания клавиши клавиатуры.- Тип результата
- Результат
PassEvent, чтобы пропустить событие дальше по цепочке обработчиков. ИлиBlockEvent, чтобы блокировать дальнейшую обработку события.
-
mouseDoubleClickEvent(event)¶ Обрабатывает событие двойного клика мыши.
- Параметры
event (
QMouseEvent) – Событие двойного клика мыши.- Тип результата
- Результат
PassEvent, чтобы пропустить событие дальше по цепочке обработчиков. ИлиBlockEvent, чтобы блокировать дальнейшую обработку события.
-
mouseMoveEvent(event)¶ Обрабатывает событие перемещения мыши.
- Параметры
event (
QMouseEvent) – Событие перемещения мыши.- Тип результата
- Результат
PassEvent, чтобы пропустить событие дальше по цепочке обработчиков. ИлиBlockEvent, чтобы блокировать дальнейшую обработку события.
-
mousePressEvent(event)¶ Обрабатывает событие нажатия клавиши мыши.
- Параметры
event (
QMouseEvent) – Событие нажатия клавиши мыши.- Тип результата
- Результат
PassEvent, чтобы пропустить событие дальше по цепочке обработчиков. ИлиBlockEvent, чтобы блокировать дальнейшую обработку события.
-
mouseReleaseEvent(event)¶ Обрабатывает событие отпускания клавиши мыши.
- Параметры
event (
QMouseEvent) – Событие отпускания клавиши мыши.- Тип результата
- Результат
PassEvent, чтобы пропустить событие дальше по цепочке обработчиков. ИлиBlockEvent, чтобы блокировать дальнейшую обработку события.
-
paintEvent(event, painter)¶ Обрабатывает событие отрисовки.
- Параметры
event (
QPaintEvent) – Событие отрисовки.painter (
QPainter) – QPainter для рисования поверх виджета
- Тип результата
-
to_scene(device)¶ Переводит точки из координат окна(пикселей) в координаты на карте.
-
wheelEvent(event)¶ Обрабатывает событие колеса мыши.
- Параметры
event (
QWheelEvent) – Событие колеса мыши.- Тип результата
- Результат
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;
}
Таблица просмотра атрибутивной информации - TableView¶
-
class
axipy.gui.TableView¶ Базовые классы:
axipy.gui.ViewТаблица просмотра атрибутивной информации. Для создание экземпляра необходимо использовать
axipy.gui.ViewService.create_tableview()через экземпляр view_service-
property
data_object¶ Таблица, на основании которой создается данное окно просмотра.
- Тип результата
- Результат
Таблица.
-
property
Окно просмотра карты - 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¶ Система координат карты.
- Тип результата
-
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¶ Видимая область в координатах окна (пиксели).
- Тип результата
- Результат
Прямоугольник в координатах окна.
-
property
device_to_scene_transform¶ Объект трансформации из координат окна в координаты карты.
- Тип результата
- Результат
Объект трансформации.
-
property
editable_layer¶ Редактируемый слой на карте.
- Тип результата
- Результат
Редактируемый слой. Если не определен, возвращает None.
-
property
editable_layer_changed¶ Сигнал о том, что редактируемый слой сменился.
- Тип результата
Signal
-
property
scene_rect¶ Видимая область в координатах карты (в единицах измерения СК).
- Тип результата
- Результат
Прямоугольник в координатах карты.
-
property
scene_to_device_transform¶ Объект трансформации из координат карты в координаты окна.
- Тип результата
- Результат
Объект трансформации.
-
property
Доступ к выделенным объектам - SelectionService¶
-
class
axipy.gui.SelectionService¶ Класс доступа к выделенным объектам.
Примечание
Получить экземпляр сервиса можно в атрибуте
axipy.gui.selection_service.-
add(table, ids)¶ Добавляет выборку записи таблицы по их идентификаторам.
-
property
changed¶ Signal[]Выделение было изменено.- Тип результата
Signal
-
clear()¶ Очищает выборку.
-
property
count¶ Размер выделения, то есть количество выделенных записей (количество элементов в списке идентификаторов).
- Тип результата
-
get_as_cursor()¶ Возвращает выборку в виде итератора по записям.
Пример:
for f in selection_service.get_as_cursor(): print('Feature id={}. Страна={}'.format(f.id, f['Страна']))
-
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['Страна']))
- Тип результата
-
remove(tbl, ids)¶ Удаляет из выборки записи таблицы по их идентификаторам.
-
set(table, ids)¶ Создать выборку из записей таблицы по их идентификаторам.
-
Менеджер содержимого окон - ViewService¶
-
class
axipy.gui.ViewService¶ Менеджер содержимого окон.
Примечание
Используйте готовый экземпляр этого класса
view_service.Пример использования¶1 2 3
table = io.openfile(filepath) m = Map([table]) view_service.create_mapview(m)
-
property
active¶ Текущее активное окно.
-
property
active_changed¶ Signal[]Активное окно изменилось.- Тип результата
Signal
-
property
count_changed¶ Signal[]Количество окно изменилось.- Тип результата
Signal
-
create_mapview(map)¶ Создает окно из для переданного объекта карты.
- Параметры
map (
Map) – Карта.
Примечание
Переданная карта копируется.
- Тип результата
- Результат
Окно карты.
-
create_tableview(table)¶ Создает окно в виде табличного представления из объекта данных.
-
property
Диалог выбора СК - ChooseCoordSystemDialog¶
Кнопка выбора стиля - 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()
Рабочее пространство - 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')