Страница 3 из 4

Re: Создание собственных макетов

Добавлено: 28 ноя 2012, 14:00
dab
yellow-sky писал(а):И зачем усложнять процесс, если на панели есть специальная кнопка, выбрав в которой нужное действие, можно кликать по объектам??
Я так понимаю, что и вопрос то был собственно в том, как создать такое действие, активирующее пользовательскую форму для редактирования (name.ui)
Аналог, скажем, "Получить ID объекта", QtGui.QMessageBox.information(None, "Feature id", "feature id is [% $id %]"), только не QtGui.QMessageBox а форму созданную в Designer.

Re: Создание собственных макетов

Добавлено: 28 ноя 2012, 14:13
DruzhA
dab писал(а):Я так понимаю, что и вопрос то был собственно в том, как создать такое действие, активирующее пользовательскую форму для редактирования (name.ui)
Аналог, скажем, "Получить ID объекта", QtGui.QMessageBox.information(None, "Feature id", "feature id is [% $id %]"), только не QtGui.QMessageBox а форму созданную в Designer.
Абсолютно точно, dab! Может, конечно, есть и другие варианты...?!

Re: Создание собственных макетов

Добавлено: 28 ноя 2012, 14:21
DruzhA
Похоже, вопрос сводится к: что прописать в свойствах слоя-действия вместо QtGui.QMessageBox, чтобы открыть форму name.ui?

Re: Создание собственных макетов

Добавлено: 28 ноя 2012, 14:30
DruzhA
Максим Дубинин писал(а):так пишите же
Как времечко появится - займусь!

Re: Создание собственных макетов

Добавлено: 28 ноя 2012, 14:39
dab
DruzhA, а Вы когда собственные формы создаёте в дизайнере, просто объекты интерфейса называете так же, как имена атрибутов редактируемого слоя?

Re: Создание собственных макетов

Добавлено: 28 ноя 2012, 14:49
DruzhA
dab писал(а):DruzhA, а Вы когда собственные формы создаёте в дизайнере, просто объекты интерфейса называете так же, как имена атрибутов редактируемого слоя?
Как имена полей атрибутов редактируемого слоя.
Сама форма рабочая и открывается в обычном порядке - через идентификатор объектов (действия). Просто хочу упростить процесс открывания данной формы для более удобного пользования.

Re: Создание собственных макетов

Добавлено: 28 ноя 2012, 16:35
yellow-sky
DruzhA писал(а):Может, конечно, есть и другие варианты...?!
Мой вариант:

Код: Выделить всё

layer = qgis.utils.iface.activeLayer()
feat = QgsFeature()
if layer.featureAtId([% $id %], feat, False):
    qgis.utils.iface.openFeatureForm(layer, feat)
Может есть и более короткий путь. Но я не знаю :(

Re: Создание собственных макетов

Добавлено: 29 ноя 2012, 07:05
dab
yellow-sky писал(а):Мой вариант: ...
То самое! Спасибо!

Re: Создание собственных макетов

Добавлено: 29 ноя 2012, 07:32
DruzhA
yellow-sky писал(а): Мой вариант:...
А уменя ошибка вылетает:

Код: Выделить всё

При выполнении следующего кода возникла ошибка:
layer = qgis.utils.iface.activeLayer()
feat = QqsFeature()
if layer.featureAtId (2037, feat, False):
    qgis.utils.iface.openFeatureForm (layer, feat)


Traceback (most recent call last):
  File "", line 2, in 
NameError: name 'QqsFeature' is not defined

Re: Создание собственных макетов

Добавлено: 29 ноя 2012, 07:42
dab
DruzhA писал(а):А уменя ошибка вылетает: ...
"Свойства действия" / "Тип" установлено как "Приложение Python"?

Re: Создание собственных макетов

Добавлено: 29 ноя 2012, 07:52
DruzhA
dab писал(а):"Свойства действия" / "Тип" установлено как "Приложение Python"?
Да, конечно!
Такое ощущение, что либо с Python что-то не то, либо библиотеки какие-то не видит...
Дальше вот, что пишет:

Код: Выделить всё

Версия Python:
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]

Версия QGIS:
1.8.0-Lisboa 'Lisboa', exported

Re: Создание собственных макетов

Добавлено: 29 ноя 2012, 09:17
dab
DruzhA писал(а):
yellow-sky писал(а): Мой вариант:...
А уменя ошибка вылетает:

Код: Выделить всё

При выполнении следующего кода возникла ошибка:
layer = qgis.utils.iface.activeLayer()
feat = QqsFeature()
if layer.featureAtId (2037, feat, False):
    qgis.utils.iface.openFeatureForm (layer, feat)


Traceback (most recent call last):
  File "", line 2, in 
NameError: name 'QqsFeature' is not defined
Хм...
У Вас
feat = QqsFeature()
а класс называется
feat = QgsFeature()

Re: Создание собственных макетов

Добавлено: 29 ноя 2012, 09:29
DruzhA
dab писал(а): Хм...
У Вас
feat = QqsFeature()
а класс называется
feat = QgsFeature()
Оп... Точно, dab, теперь всё работает! Большое спасибо!)
yellow-sky - спасибо за код!

Можно будет добавить этот вариант в статью на эту тему, если никто не против.

Re: Создание собственных макетов

Добавлено: 29 ноя 2012, 10:43
yellow-sky
DruzhA писал(а):Можно будет добавить этот вариант в статью на эту тему, если никто не против.
Не можно, а нужно, мы же работаем с открытым кодом :)

Re: Создание собственных макетов

Добавлено: 30 ноя 2012, 15:33
yellow-sky
Кстати о будущем, которое можно потрогать сегодня, если запустить ночную сборку.
В версии 2.0 будет на порядок удобнее создавать формы для редактирования. Это часть была серьезно переработана, и теперь пользователь может выбирать из трех вариантов:
  • * Автоматическая генерация (по умолчанию)
    * Указание своей формы, подготовленной в QtDesigner (то же самое что и раньше)
    * Генерация сложной формы с группами и закладками по указанию пользователя (новый, удобный вариант)
Как пример по последнему пункту. Настройка формы в свойствах слоя:
props.png
props.png (105.31 КБ) 10784 просмотра
Получившаяся форма:
address.png
address.png (25.11 КБ) 10784 просмотра
info.png
info.png (26.66 КБ) 10784 просмотра
Кстати теперь настройка форм для редактирования переехала в более логичную вкладку - Поля. Пока есть некоторые недоработки, но будем надеемся что в 2ке этот механизм будет идеальным.
(Хочется поулыбаться над пользователями проприетарных ГИС, у которых не будет такого простого и удобного встроенного редактора :) )