Добавить диалоговое окно в модуль QGIS Python

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
Prince660
Активный участник
Сообщения: 129
Зарегистрирован: 25 мар 2011, 20:12
Репутация: 8
Откуда: г. Симферорполь
Контактная информация:

Добавить диалоговое окно в модуль QGIS Python

Сообщение Prince660 » 17 июн 2018, 18:54

Друзья! Переделываю чужой модуль на питоне под себя. Нужную функцию почти реализовал, возникла проблема добавления диалогового окна. По инструкциям что нашёл в интернетах везде диалоговое окно уже как бы создано при создании модуля с нуля, а дальше его можно менять.
У меня в модуле нет диалоговых окон, есть только функция выделения нужных объектов. Так вот нужно добавить диалоговое окно в котором пользователь должен ввести одно слово (тобишь текст), которое запишется в переменную и будет использоваться для фильтрации объектов.
Диалоговое окно создал (в Qt Creator), а как его теперь привязать к программе чтобы после определённого действия оно всплывало и запрашивало значение для переменной?
Мой уровень знаний о Питоне очень начальный, так что сильно не пинайте...
Снимок.PNG
Снимок.PNG (19.85 КБ) 333 просмотра

Аватара пользователя
SMOuk96
Интересующийся
Сообщения: 29
Зарегистрирован: 30 июн 2017, 17:07
Репутация: 2
Откуда: Красноярск

Re: Добавить диалоговое окно в модуль QGIS Python

Сообщение SMOuk96 » 17 июн 2018, 21:08

Вам нужно найти файл скрипта , обычно он расположен здесь: C:\Users\Имя пользователя\.qgis2\python\plugins\название скрипта. Найдите питоновский файл с расширением .py ''имя_модуля.py'
:arrow: Это код в функцию "def run(self)" или в "def __init__(self, iface)"

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

        #подключаем виджеты
        from PyQt5.QtWidgets import QLineEdit
        from PyQt5.QtWidgets import QDialogButtonBox

        # OK и Cancel кнопки
        self.buttonbox = QDialogButtonBox(QDialogButtonBox.Ok |
                                          QDialogButtonBox.Cancel)
        buttons.accepted.connect(self.accept) #событие OK
        buttons.rejected.connect(self.reject)) #событие Cancel
        
        #Связывает текстовое поле и переменную line_name
        self.line_name = QLineEdit(self)
        #функция записывает значение из текстового поля в переменную X
        def accept(self):
            X = self.line_name.text()
        
        def reject(self):
            exit(1) # выход
Примеров в интернете достаточно. Вот полезная статья - http://www.qgistutorials.com/ru/docs/bu ... lugin.html

Dmitry Stasev
Интересующийся
Сообщения: 31
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 11
Откуда: MO

Re: Добавить диалоговое окно в модуль QGIS Python

Сообщение Dmitry Stasev » 18 июн 2018, 17:59

Может все и проще.
Если окно создано из шаблона
1.png
1.png (15.01 КБ) 283 просмотра
то там, скорее всего, уже и сигналы-слоты прописаны
2.png
2.png (17.76 КБ) 283 просмотра
и Вам останется сделать маленький класс (типа обертки на форму)

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

# -*- coding: utf-8 -*-
from PyQt4 import QtGui, uic
from PyQt4.QtGui import *

FORM_CLASS, _ = uic.loadUiType(u'ПУТЬ К ФОРМЕ search.ui')

class SearchDialog(QtGui.QDialog, FORM_CLASS):
    def __init__(self, parent=None):
        super(SearchDialog, self).__init__(parent)
        self.setupUi(self)
И если Вам не надо добавлять логики в событие нажатия кнопки, можно сделать примерно так:

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

sd=SearchDialog()
sd.show()
# ждем нажатия
result = sd.exec_()
# смотрим что нажали
if result:
    QMessageBox.information(None, u'Введено', sd.lineEdit.text())

Аватара пользователя
Prince660
Активный участник
Сообщения: 129
Зарегистрирован: 25 мар 2011, 20:12
Репутация: 8
Откуда: г. Симферорполь
Контактная информация:

Re: Добавить диалоговое окно в модуль QGIS Python

Сообщение Prince660 » 18 июн 2018, 20:45

Попробовал оба варианта, ни один "не взлетел". Хотя второй вариант мне ближе он с PyQt4, а не 5.
Я так понял что эту "обёртку" нужно хранить отдельным файлом и импортировать его.

Выдаёт ошибку несуществующего адреса в строке: FORM_CLASS, _ = uic.loadUiType(u'search.ui')
хотя название указано верно и файл лежит в этой же папке.

Dmitry Stasev
Интересующийся
Сообщения: 31
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 11
Откуда: MO

Re: Добавить диалоговое окно в модуль QGIS Python

Сообщение Dmitry Stasev » 18 июн 2018, 21:10

абсолютный ПУТЬ К ФОРМЕ
Prince660 писал(а):
18 июн 2018, 20:45
Я так понял что эту "обёртку" нужно хранить отдельным файлом и импортировать его.
Можете и в этом же файле оформить и ничего не импортировать

Аватара пользователя
Prince660
Активный участник
Сообщения: 129
Зарегистрирован: 25 мар 2011, 20:12
Репутация: 8
Откуда: г. Симферорполь
Контактная информация:

Re: Добавить диалоговое окно в модуль QGIS Python

Сообщение Prince660 » 18 июн 2018, 22:28

Dmitry Stasev писал(а):
18 июн 2018, 21:10
абсолютный ПУТЬ К ФОРМЕ
точно, заработало, огромное спасибо!
правда абсолютный путь буду получать по такому примеру

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

>>> import os
>>> os.path.abspath("mydir/myfile.txt")

Dmitry Stasev
Интересующийся
Сообщения: 31
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 11
Откуда: MO

Re: Добавить диалоговое окно в модуль QGIS Python

Сообщение Dmitry Stasev » 19 июн 2018, 07:59

Путь можно получить и динамически, если файл формы лежит где и модуль

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

os.path.join(os.path.dirname(__file__), 'search.ui')

Аватара пользователя
Prince660
Активный участник
Сообщения: 129
Зарегистрирован: 25 мар 2011, 20:12
Репутация: 8
Откуда: г. Симферорполь
Контактная информация:

Re: Добавить диалоговое окно в модуль QGIS Python

Сообщение Prince660 » 21 июн 2018, 22:43

Dmitry Stasev писал(а):
19 июн 2018, 07:59
Путь можно получить и динамически, если файл формы лежит где и модуль
КОД: ВЫДЕЛИТЬ ВСЁ

os.path.join(os.path.dirname(__file__), 'search.ui')
Да, так даже лучше работает. Тот вариант что я написал почему-то вставлял неверный адрес, он указывал не папку модуля, а папку QGIS.

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя