QFileDialog打开两个对话框

时间:2012-07-13 22:19:43

标签: python qt pyqt qfiledialog

我想将选定文件的位置存储为Python中的字符串。我正在尝试使用QFileDialog来实现这一点,我有:

self.filedialog = QtGui.QFileDialog(self)
self.filedialog.show()
filepath = str(self.filedialog.getOpenFileName())

这将打开两个QFileDialog窗口。有趣的是,其中一个窗口没有继承'风格'我的GUI,设置我的setStyle,但确实返回文件路径字符串。另一个QFileDialog确实继承了样式,但是无法返回文件路径字符串。我发现QFileDialog documentation很有帮助,但是无法创建一个QFileDialog框,它们都生成文件路径字符串,并继承了我的GUI样式。我犯了什么错误?

3 个答案:

答案 0 :(得分:2)

你实际创建了2个窗口。

函数QFileDialog.getOpenFileName是静态的,这意味着它创建自己的QFileDialog对象,显示窗口,等待用户选择文件并返回选择的文件名。

你应该只需要那条线:

filepath = str(QFileDialog.getOpenFileName())

如果您在应用程序级别设置样式(使用QApplication.setStyle),如果您使用非本机对话框,它可能会应用于窗口:

filepath = str(QFileDialog.getOpenFileName(options=QFileDialog.DontUseNativeDialog)))

答案 1 :(得分:1)

getOpenFileName"creates a modal file dialog"的便利功能。这就是你得到第二个对话框的原因。

使用filedialog.exec()显示对话框,使用fileDialog.selectedFiles()获取文件名。

答案 2 :(得分:-1)

exec是python中的保留字,必须使用exec _()。

dialog = QFileDialog(self)
dialog.exec_()
for file in dialog.selectedFiles():
    print file