PyQT5 QFileDialog窗口标题未在mac上显示

Posted

技术标签:

【中文标题】PyQT5 QFileDialog窗口标题未在mac上显示【英文标题】:PyQT5 QFileDialog window title not showing on mac 【发布时间】:2021-09-09 15:27:06 【问题描述】:

我在 Windows 上制作了一个 PyQt5 应用程序,现在我想在 Mac 上使用该应用程序。该应用程序会提示用户选择几个不同的文件。我使用 QFileDialog 窗口的标题来让用户知道哪些文件是这样的:

    instrument_file_raw=QFileDialog().getOpenFileName(self, "Select Instrument File","","Excel (*.xlsx)")
    instrument_file_raw=str(instrument_file_raw[0])
    
    if instrument_file_raw=="":
        error_dialog = QErrorMessage(self)
        error_dialog.showMessage('No filename entered')
        return
    
    run_list_file=QFileDialog().getOpenFileName(self, "Select Run List File","","Excel (*.xlsx)")
    run_list_file=str(run_list_file[0])
    
    if run_list_file=="":
        error_dialog = QErrorMessage(self)
        error_dialog.showMessage('No filename entered')
        return

但是,当我在 Mac 上运行相同的代码时,文件资源管理器打开时没有显示窗口标题。即使我手动设置窗口标题

instrument_file_window=QFileDialog()
instrument_file_window.setWindowTitle("Select Instrument File")
instrument_file_raw=instrument_file_window.getOpenFileName(self,"Select Instrument File","","Excel (*.xlsx)") 

有没有办法在 Mac 上显示窗口标题?如何向用户指示要输入的内容?

【问题讨论】:

您可能使用的是高于 10.11 的 macOS 版本,对吧? 是的,它的 10.15.5 【参考方案1】:

这是一个尚未修复的已知问题(请参阅 QTBUG-59805),并且与从 10.11 版 (El Capitan) 开始对 macOS 的更改有关。

如果确实需要显示标题,唯一的解决方案是使用非原生文件对话框选项。

path, filter = QtWidgets.QFileDialog.getOpenFileName(
    self, "Select Instrument File", "", "Excel (*.xlsx)", 
    options=QtWidgets.QFileDialog.DontUseNativeDialog
    )

注意getOpenFileName,和其他类似的函数一样,是一个静态函数:它构造和配置一个new文件对话框实例,然后返回它。事实上,如果你仔细看我上面的代码,我在QFileDialog之后没有使用任何括号。 除了参数中的选项之外,no 如果创建的对话框是本机的,则无法访问它,并且非本机对话框的访问权限有限,但只能通过使用复杂的系统(例如检查***小部件)也并不总是可靠的。

以上也意味着:

    您不需要创建新实例,因为它不会被使用; 出于同样的原因,设置任何属性(如窗口标题)绝对没有效果;

【讨论】:

这行得通我只是有点困惑过滤器变量的作用。没有它就不行 @Gingerhaze “没有它就不行”是什么意思?

以上是关于PyQT5 QFileDialog窗口标题未在mac上显示的主要内容,如果未能解决你的问题,请参考以下文章

Pyinstaller 的 PyQT5 QFileDialog 问题

PyQt4 和 PyQt5 中的 QFileDialog 字符串有区别吗?

小部件未在 pyqt5 中显示标签

Pyqt5 QFileDialog 在我的获取目录程序中不起作用

PyQt4和PyQt5中的QFileDialog字符串有区别吗?

PyQt5 组件之QDialog