在我的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?
答案 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(并非所有这些都与本机文件对话框相关)。