Ошибка имени: имя ‘QFileDialog’ не определено

#python #pyqt #qfiledialog

#python #pyqt #qfiledialog

Вопрос:

Я работаю над курсовой работой по информатике и не могу понять, почему фрагмент кода не работает. Я пытаюсь подключить кнопку, которую я создал в PyQt4, чтобы при ее нажатии отображался диалог каталога:

 self.Browse_Button_1 = QtGui.QToolButton(self.tab)
    self.Browse_Button_1.setGeometry(QtCore.QRect(360, 30, 61, 20))
    self.Browse_Button_1.setObjectName(_fromUtf8("Browse_Button_1"))
    file = str(QFileDialog.getExistingDirectory(self, "Select Directory"))
    self.Browse_Button_1.clicked.connect(self, file)
  

Однако каждый раз, когда я запускаю программу, я просто получаю эту ошибку:

 Traceback (most recent call last):
   File "D:NEA ProjectNEA_UI.py", line 194, in <module>
     ui = Ui_Dialog()
   File "D:NEA ProjectNEA_UI.py", line 30, in __init__
     self.setupUi(self)
   File "D:NEA ProjectNEA_UI.py", line 55, in setupUi
     file = str(QFileDialog.getExistingDirectory(self, "Select Directory"))
NameError: name 'QFileDialog' is not defined
  

Буду признателен за любую помощь в решении проблемы.

Ответ №1:

QFileDialog находится в модуле QtGui, поэтому вам нужно добавить его в начало вашей строки, например:

 file = str(QtGui.QFileDialog.getExistingDirectory(self, "Select Directory"))
  

В качестве альтернативы, если вы хотите использовать QFileDialog без QtGui переднего плана, вам необходимо импортировать его из модуля (в верхней части вашего файла) с:

 from PyQt4.QtGui import QFileDialog
  

Или для Qt5 (обратите внимание, что в Qt5 QFileDialog перемещено в QtWidgets модуль):

 from PyQt5.QtWidgets import QFileDialog
  

Комментарии:

1. Я попробовал ваше решение, и, к сожалению, оно выдает следующую ошибку. Я использую школьный компьютер, так что, возможно, ему просто не хватает какой-то библиотеки.

2. code Трассировка (последний последний вызов): файл «D:NEA ProjectNEA_UI.py «, строка 161, в файле <module> ui.setupUi(диалоговое окно) «D:NEA ProjectNEA_UI.py «, строка 49, в файле setupUi = str(QFileDialog.getExistingDirectory(self, «Выбрать каталог»)) Ошибка типа: QFileDialog.getExistingDirectory(родительский элемент QWidget = Нет, заголовок str =», каталог str =», QFileDialog. Параметры параметры = QFileDialog. ShowDirsOnly): аргумент 1 имеет неожиданный тип ‘Ui_Dialog’

3. Traceback (most recent call last): File "D:NEA ProjectNEA_UI.py", line 161, in <module> ui.setupUi(Dialog) File "D:NEA ProjectNEA_UI.py", line 49, in setupUi file = str(QFileDialog.getExistingDirectory(self, "Select Directory")) TypeError: QFileDialog.getExistingDirectory(QWidget parent=None, str caption='', str directory='', QFileDialog.Options options=QFileDialog.ShowDirsOnly): argument 1 has unexpected type 'Ui_Dialog'

4. @SirEctoplasm эта ошибка связана с типом self параметра. Это должен быть тип Qt ( QWidget ), но это не так. Что self в вашем примере?

5. Трассировка (последний последний вызов): файл «D:NEA ProjectNEA_UI.py «, строка 161, в файле <module> ui.setupUi(диалоговое окно) «D:NEA ProjectNEA_UI.py «, строка 49, в файле setupUi = str(QFileDialog.getExistingDirectory(self, «Выбрать каталог»)) Ошибка типа: QFileDialog.getExistingDirectory(родительский элемент QWidget = Нет, заголовок str =», каталог str =», QFileDialog. Параметры параметры = QFileDialog. ShowDirsOnly): аргумент 1 имеет неожиданный тип ‘Ui_Dialog’