本机自定义文件对话框PyQt

时间:2016-03-24 11:58:59

标签: python-3.x pyqt

在我的PyQt应用程序中,我试图运行原生但是自定义的QFileDialog 我的代码看起来像这样。

dlg = QtGui.QFileDialog(self, caption=self.tr("Select a file")))
dlg.setNameFilters("Text files (*.txt)")

if dlg.exec_():
    name = dlg.selectedFiles()

但是这显示了一个Qt对话框,而不是原生的。我试过了

dlg.setOption(QtGui.QFileDialog.DontUseNativeDialog, False)

但这并没有帮助 如何运行自定义本机QFileDialog?

2 个答案:

答案 0 :(得分:0)

您只能使用QFileDialog上的静态函数来获取本机文件对话框。 DontUseNativeDialog选项仅在使用静态函数时有效。

QFileDialog.getSaveFileName()

来自Docs

  

创建QFileDialog的最简单方法是使用静态函数。在Windows,Mac OS X,KDE和GNOME上,这些静态函数将尽可能调用本机文件对话框。

QFileDialog.DontUseNativeDialog   0x00000010  
     

不要使用本机文件对话框。默认情况下,除非您使用包含Q_OBJECT宏的QFileDialog的子类,否则将使用本机文件对话框。

答案 1 :(得分:0)

自定义原生对话框是一个矛盾的对话。选择使用本机对话框的主要原因是,您可以完全平台通常提供的内容。

但这是一个没有实际意义的问题,因为getOpenFileName可以让您在没有任何自定义的情况下实现您想要的目标:

name = QFileDialog.getOpenFileName(
            parent=self,
            caption=self.tr("Select a file"),
            filter=self.tr('Text files (*.txt)'),
            )
if name:
    print(name)

除了上述参数外,还有dir,它允许您设置开始目录; selectedFilter,允许您设置初始过滤器;和options,它允许您设置一个或多个Option values(并非所有这些都与本机文件对话框相关)。