Добавить диалоговое окно в модуль QGIS Python
- Prince660
- Активный участник
- Сообщения: 164
- Зарегистрирован: 25 мар 2011, 20:12
- Репутация: 15
- Ваше звание: Питоновод
- Откуда: г. Симферорполь
- Контактная информация:
Добавить диалоговое окно в модуль QGIS Python
Друзья! Переделываю чужой модуль на питоне под себя. Нужную функцию почти реализовал, возникла проблема добавления диалогового окна. По инструкциям что нашёл в интернетах везде диалоговое окно уже как бы создано при создании модуля с нуля, а дальше его можно менять.
У меня в модуле нет диалоговых окон, есть только функция выделения нужных объектов. Так вот нужно добавить диалоговое окно в котором пользователь должен ввести одно слово (тобишь текст), которое запишется в переменную и будет использоваться для фильтрации объектов.
Диалоговое окно создал (в Qt Creator), а как его теперь привязать к программе чтобы после определённого действия оно всплывало и запрашивало значение для переменной?
Мой уровень знаний о Питоне очень начальный, так что сильно не пинайте...
У меня в модуле нет диалоговых окон, есть только функция выделения нужных объектов. Так вот нужно добавить диалоговое окно в котором пользователь должен ввести одно слово (тобишь текст), которое запишется в переменную и будет использоваться для фильтрации объектов.
Диалоговое окно создал (в Qt Creator), а как его теперь привязать к программе чтобы после определённого действия оно всплывало и запрашивало значение для переменной?
Мой уровень знаний о Питоне очень начальный, так что сильно не пинайте...
- SMOuk96
- Интересующийся
- Сообщения: 29
- Зарегистрирован: 30 июн 2017, 17:07
- Репутация: 2
- Откуда: Красноярск
Re: Добавить диалоговое окно в модуль QGIS Python
Вам нужно найти файл скрипта , обычно он расположен здесь: C:\Users\Имя пользователя\.qgis2\python\plugins\название скрипта. Найдите питоновский файл с расширением .py ''имя_модуля.py'
Это код в функцию "def run(self)" или в "def __init__(self, iface)"
Примеров в интернете достаточно. Вот полезная статья - http://www.qgistutorials.com/ru/docs/bu ... lugin.html
Это код в функцию "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) # выход
-
- Участник
- Сообщения: 67
- Зарегистрирован: 13 мар 2018, 08:59
- Репутация: 22
- Откуда: MO
Re: Добавить диалоговое окно в модуль QGIS Python
Может все и проще.
Если окно создано из шаблона то там, скорее всего, уже и сигналы-слоты прописаны и Вам останется сделать маленький класс (типа обертки на форму)
И если Вам не надо добавлять логики в событие нажатия кнопки, можно сделать примерно так:
Если окно создано из шаблона то там, скорее всего, уже и сигналы-слоты прописаны и Вам останется сделать маленький класс (типа обертки на форму)
Код: Выделить всё
# -*- 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
- Активный участник
- Сообщения: 164
- Зарегистрирован: 25 мар 2011, 20:12
- Репутация: 15
- Ваше звание: Питоновод
- Откуда: г. Симферорполь
- Контактная информация:
Re: Добавить диалоговое окно в модуль QGIS Python
Попробовал оба варианта, ни один "не взлетел". Хотя второй вариант мне ближе он с PyQt4, а не 5.
Я так понял что эту "обёртку" нужно хранить отдельным файлом и импортировать его.
Выдаёт ошибку несуществующего адреса в строке: FORM_CLASS, _ = uic.loadUiType(u'search.ui')
хотя название указано верно и файл лежит в этой же папке.
Я так понял что эту "обёртку" нужно хранить отдельным файлом и импортировать его.
Выдаёт ошибку несуществующего адреса в строке: FORM_CLASS, _ = uic.loadUiType(u'search.ui')
хотя название указано верно и файл лежит в этой же папке.
-
- Участник
- Сообщения: 67
- Зарегистрирован: 13 мар 2018, 08:59
- Репутация: 22
- Откуда: MO
- Prince660
- Активный участник
- Сообщения: 164
- Зарегистрирован: 25 мар 2011, 20:12
- Репутация: 15
- Ваше звание: Питоновод
- Откуда: г. Симферорполь
- Контактная информация:
Re: Добавить диалоговое окно в модуль QGIS Python
точно, заработало, огромное спасибо!
правда абсолютный путь буду получать по такому примеру
Код: Выделить всё
>>> import os
>>> os.path.abspath("mydir/myfile.txt")
-
- Участник
- Сообщения: 67
- Зарегистрирован: 13 мар 2018, 08:59
- Репутация: 22
- Откуда: MO
Re: Добавить диалоговое окно в модуль QGIS Python
Путь можно получить и динамически, если файл формы лежит где и модуль
Код: Выделить всё
os.path.join(os.path.dirname(__file__), 'search.ui')
- Prince660
- Активный участник
- Сообщения: 164
- Зарегистрирован: 25 мар 2011, 20:12
- Репутация: 15
- Ваше звание: Питоновод
- Откуда: г. Симферорполь
- Контактная информация:
Re: Добавить диалоговое окно в модуль QGIS Python
Да, так даже лучше работает. Тот вариант что я написал почему-то вставлял неверный адрес, он указывал не папку модуля, а папку QGIS.Dmitry Stasev писал(а): ↑19 июн 2018, 07:59Путь можно получить и динамически, если файл формы лежит где и модуль
КОД: ВЫДЕЛИТЬ ВСЁ
os.path.join(os.path.dirname(__file__), 'search.ui')
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 27 гостей