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')