Почему в python при нажатии на "Отмена" при открытии нескольких файлов программа вылетает?

Добрый день! Не подскажите почему в python при нажатии на "Отмена" при открытии нескольких файлов методом QFileDialog.getOpenFileNames программа вылетает?

Код:

  1. import sys
  2. import codecs
  3.  
  4. from vira import *
  5. from PyQt5 import QtCore, QtGui, QtWidgets
  6. from PyQt5.QtWidgets import (QDialog, QFileDialog, QMessageBox, QLineEdit, QProgressBar, QProgressDialog)
  7. from PyQt5.QtCore import QDir, QDirIterator
  8.  
  9.  
  10. class MyWin (QtWidgets.QMainWindow):
  11. def __init__(self, parent=None):
  12. QtWidgets.QWidget.__init__ (self, parent)
  13. self.ui = Ui_MainWindow ()
  14. self.ui.setupUi (self)
  15.  
  16. self.ui.pushButton.clicked.connect (self.Open)
  17. self.ui.pushButton_2.clicked.connect (self.close)
  18.  
  19. def Open(self):
  20. self.ui.textEdit.clear ()
  21. files, _ = QFileDialog.getOpenFileNames (self, "Выбрать файлы", "/home", "*.txt")
  22. hjh = list (filter (lambda x: x != '*.las *.txt', files))
  23. myString = '\n'.join (hjh)
  24. self.ui.textEdit.setText (myString)
  25. if self.ui.comboBox.currentIndex () == 0:
  26. strx = self.ui.textEdit.toPlainText ()
  27. strxList = strx.split ('\n')
  28. else:
  29. strx = self.ui.textEdit.toPlainText ()
  30. strxList = strx.split ('\n')
  31.  
  32. for jk in range (0, len (strxList), 1):
  33. print (strxList[jk])
  34. f = codecs.open (strxList[jk], 'r', encoding='cp866')
  35. for line in f:
  36. pkp = 1
  37. for lk in range (0, len(line), 1):
  38. if line[lk] == '0' or line[lk] == '1' or line[lk] == '2' or line[lk] == '3' or line[lk] == '4' or line[lk] == '5' or line[lk] == '6' or line[lk] == '7' or line[lk] == '8' or line[lk] == '9' or line[lk] == '.' or line[lk] == ',' or line[lk] == '-' or line[lk] == '\n' or line[lk] == ' ' or line[lk] == ' ':#or line[lk:(lk+2)] != '--' or line[lk] != '#':
  39. pkp += 1
  40. if pkp == len(line):
  41. print(line[0:len(line)-1])
  42. self.ui.textEdit.append(line[0:len(line)-2])
  43. f.close()
  44.  
  45. if __name__ == "__main__":
  46. app = QtWidgets.QApplication (sys.argv)
  47. myapp = MyWin ()
  48. myapp.show ()
  49. sys.exit (app.exec_ ())
2

Do you like it? Share on social networks!

4
Evgenii Legotckoi
  • Oct. 16, 2019, 6:09 p.m.
  • The answer was marked as a solution.

Добрый день.

Полагаю потому, что в случае нажатия "Отмена" у вас всё равно возвращается какой-то список, только пустой. Нужно добавить проверку

Скорее всего должно выглядеть как-то так

  1. files, _ = QFileDialog.getOpenFileNames (self, "Выбрать файлы", "/home", "*.txt")
  2. if not files.isEmpty():
  3. # Остальной код

или

  1. files, _ = QFileDialog.getOpenFileNames (self, "Выбрать файлы", "/home", "*.txt")
  2. if len(files) > 0:
  3. # Остальной код

Не знаю, какой именно синтаксис там будет правильный, не помню, заменяется ли QStringList в PyQt5 на обычный python list или нет.

    Благодарю Вас Евгений за оперативность)) Второй вариант сработал))

      Используйте, пожалуйста при вставке программного кода диалоговое окно, кнопка вот с этим значком <>

        Хорошо, запомнил

          Comments

          Only authorized users can post comments.
          Please, Log in or Sign up
          • Last comments
          • Evgenii Legotckoi
            March 9, 2025, 9:02 p.m.
            К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
          • VP
            March 9, 2025, 4:14 p.m.
            Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
          • ИМ
            Nov. 22, 2024, 9:51 p.m.
            Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
          • Evgenii Legotckoi
            Oct. 31, 2024, 11:37 p.m.
            Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
          • A
            Oct. 19, 2024, 5:19 p.m.
            Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html