2012-07-13 69 views
0

我想在Python中将所选文件的位置作为字符串存储。我试图使用QFileDialog来做到这一点,我有:QFileDialog打开两个对话框

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

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

回答

1

你实际上创建了2个窗口。

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

你应该只需要一行:如果你设置的样式在应用层面(与QApplication.setStyle

filepath = str(QFileDialog.getOpenFileName()) 

,它可能如果使用非本地对话框应用到窗口:

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

谢谢,这工作出色。 DontUseNativeDialog允许QFileDialog对象继承样式,并且当我将_self_作为getOpenFileName调用的第一个参数添加时,它也继承了我的gui样式表。再次感谢! – gortron 2012-07-13 23:39:33

1

getOpenFileName是一个便利的功能,"creates a modal file dialog"。这就是为什么你会得到第二个对话框。

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

+0

感谢马克 - 摆脱getOpenFileName修复了两个窗口的问题。我仍然有困难返回选定的文件的位置字符串。 ()对filedialog对象来说不是可行的函数调用,但是如果将它保留为filedialog.show(),filedialog.selectedFiles()仅以当前字符串的形式返回当前目录的路径。 – gortron 2012-07-13 23:17:57

-1

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

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