Страница 1 из 1
Добавить диалоговое окно в модуль QGIS Python
Добавлено: 17 июн 2018, 18:54
Prince660
Друзья! Переделываю чужой модуль на питоне под себя. Нужную функцию почти реализовал, возникла проблема добавления диалогового окна. По инструкциям что нашёл в интернетах везде диалоговое окно уже как бы создано при создании модуля с нуля, а дальше его можно менять.
У меня в модуле нет диалоговых окон, есть только функция выделения нужных объектов. Так вот нужно добавить диалоговое окно в котором пользователь должен ввести одно слово (тобишь текст), которое запишется в переменную и будет использоваться для фильтрации объектов.
Диалоговое окно создал (в Qt Creator), а как его теперь привязать к программе чтобы после определённого действия оно всплывало и запрашивало значение для переменной?
Мой уровень знаний о Питоне очень начальный, так что сильно не пинайте...
- Снимок.PNG (19.85 КБ) 4485 просмотров
Re: Добавить диалоговое окно в модуль QGIS Python
Добавлено: 17 июн 2018, 21:08
SMOuk96
Вам нужно найти файл скрипта , обычно он расположен здесь: C:\Users\Имя пользователя\.qgis2\python\plugins\название скрипта. Найдите питоновский файл с расширением .py ''имя_модуля.py'
Это код в функцию "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
Re: Добавить диалоговое окно в модуль QGIS Python
Добавлено: 18 июн 2018, 17:59
Dmitry Stasev
Может все и проще.
Если окно создано из шаблона
- 1.png (15.01 КБ) 4435 просмотров
то там, скорее всего, уже и сигналы-слоты прописаны
- 2.png (17.76 КБ) 4435 просмотров
и Вам останется сделать маленький класс (типа обертки на форму)
Код: Выделить всё
# -*- 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())
Re: Добавить диалоговое окно в модуль QGIS Python
Добавлено: 18 июн 2018, 20:45
Prince660
Попробовал оба варианта, ни один "не взлетел". Хотя второй вариант мне ближе он с PyQt4, а не 5.
Я так понял что эту "обёртку" нужно хранить отдельным файлом и импортировать его.
Выдаёт ошибку несуществующего адреса в строке: FORM_CLASS, _ = uic.loadUiType(u'search.ui')
хотя название указано верно и файл лежит в этой же папке.
Re: Добавить диалоговое окно в модуль QGIS Python
Добавлено: 18 июн 2018, 21:10
Dmitry Stasev
абсолютный ПУТЬ К ФОРМЕ
Prince660 писал(а): ↑18 июн 2018, 20:45
Я так понял что эту "обёртку" нужно хранить отдельным файлом и импортировать его.
Можете и в этом же файле оформить и ничего не импортировать
Re: Добавить диалоговое окно в модуль QGIS Python
Добавлено: 18 июн 2018, 22:28
Prince660
точно, заработало, огромное спасибо!
правда абсолютный путь буду получать по такому примеру
Код: Выделить всё
>>> import os
>>> os.path.abspath("mydir/myfile.txt")
Re: Добавить диалоговое окно в модуль QGIS Python
Добавлено: 19 июн 2018, 07:59
Dmitry Stasev
Путь можно получить и динамически, если файл формы лежит где и модуль
Код: Выделить всё
os.path.join(os.path.dirname(__file__), 'search.ui')
Re: Добавить диалоговое окно в модуль QGIS Python
Добавлено: 21 июн 2018, 22:43
Prince660
Dmitry Stasev писал(а): ↑19 июн 2018, 07:59
Путь можно получить и динамически, если файл формы лежит где и модуль
КОД: ВЫДЕЛИТЬ ВСЁ
os.path.join(os.path.dirname(__file__), 'search.ui')
Да, так даже лучше работает. Тот вариант что я написал почему-то вставлял неверный адрес, он указывал не папку модуля, а папку QGIS.