Как предотвратить взлом sh QGIS плагина, если getOpenFileName () не работает? - PullRequest
0 голосов
/ 20 февраля 2020

Я пишу плагин QGIS (для QGIS3), где я пытаюсь разрешить пользователю открывать имя файла с помощью функции getOpenFileName (). Он отлично работает, когда пользователь выбирает файл, но если он этого не делает (нажимает кнопку «Закрыть» или «Отмена» в диалоговом окне открытия файла), происходит сбой всего приложения QGIS.

Я пытался предотвратить это с помощью функции try / error, но она все равно не помогла мне предотвратить cra sh.

У меня есть следующий код:

import qgis
import PyQt5
from PyQt5.QtWidgets import QAction, QMessageBox
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QFileDialog, QProgressBar, QProgressDialog
try:
    filename5 = QtWidgets.QFileDialog.getOpenFileName()[0] #Here the program risks to crash
except:
    QMessageBox.information(None, 'Error', 'Error')
self.dlg.lineEdit.setText(filename5)
self.iface.addVectorLayer(filename5, 'Lithsamp', 'ogr')

Ответы [ 2 ]

0 голосов
/ 23 февраля 2020

Вы должны проверить длину возвращаемого пути

fpath, filters = QFileDialog.getOpenFileName()
if len(fpath) > 0:
    do_stuff
0 голосов
/ 23 февраля 2020

Попытка / исключение ничего не перехватывает, потому что ошибки никогда не бывает. Когда пользователь отменяет диалог, filename5 будет просто пустой строкой. Вместо этого вы можете использовать оператор if / else.

filename5 = QtWidgets.QFileDialog.getOpenFileName()[0]
if filename5:
    self.dlg.lineEdit.setText(filename5)
    self.iface.addVectorLayer(filename5, 'Lithsamp', 'ogr')
else:
    QMessageBox.information(None, 'Error', 'Error')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...