名称错误: 名称 'QFileDialog' 未定义。

4

我正在为计算机科学课程工作,但无法弄清楚代码为什么不起作用。我正在尝试连接在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 Project\NEA_UI.py", line 194, in <module>
     ui = Ui_Dialog()
   File "D:\NEA Project\NEA_UI.py", line 30, in __init__
     self.setupUi(self)
   File "D:\NEA Project\NEA_UI.py", line 55, in setupUi
     file = str(QFileDialog.getExistingDirectory(self, "Select Directory"))
NameError: name 'QFileDialog' is not defined

任何关于这个问题的帮助都将不胜感激。
1个回答

7

QFileDialog 是在 QtGui 模块中的,所以你需要在行首添加该模块,例如:

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

或者,如果你想在不使用QtGui的情况下使用QFileDialog,你需要从模块中导入它(在文件顶部),使用以下代码:

from PyQt4.QtGui import QFileDialog

或者对于Qt5(请注意,在Qt5中,QFileDialog已移至QtWidgets模块):

from PyQt5.QtWidgets import QFileDialog

@SirEctoplasm,这个错误是在抱怨self参数的类型。它需要是Qt类型(QWidget),但它不是。在你的例子中,self是什么? - mfitzp
追踪(最近的调用在最后): 文件 "D:\NEA Project\NEA_UI.py",第161行,在<module>中: ui.setupUi(Dialog) 文件 "D:\NEA Project\NEA_UI.py",第49行,在setupUi中: file = str(QFileDialog.getExistingDirectory(self, "选择目录")) 类型错误:QFileDialog.getExistingDirectory(QWidget parent=None, str caption='', str directory='', QFileDialog.Options options=QFileDialog.ShowDirsOnly):参数1具有意外的类型'Ui_Dialog' - Sir Ectoplasm
@SirEctoplasm 我能读懂 :) 但是 Ui_Dialog 是什么?它是 QWidget 类型吗?如果不是,你需要将父窗口作为第一个参数传递给你的 QFileDialog(例如你的 QMainWindow 实例)。 - mfitzp
那里的 self 参数只需要是“拥有”对话框的东西。我通常传递主窗口,但这并不重要。 - mfitzp
@SirEctoplasm 请看这个网址 http://pastebin.com/CxRVz31s ,你需要将对话框放入一个函数中(同时也要处理它的结果)。在这个粘贴内容中,我已经为第一个“encrypt”按钮完成了这个操作。我还把输入框改为QLineEdit,因为它更适合这个操作。 - mfitzp
显示剩余14条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接