PyQT5 QFileDialog window 标题未显示在 mac

PyQT5 QFileDialog window title not showing on mac

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

    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 上使用相同的代码时,文件资源管理器打开时没有显示 window 标题。即使我手动设置 window 标题

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 上显示 window 标题?我如何指示用户输入什么?

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

如果确实需要显示标题,唯一的解决办法是使用非本机 文件对话框选项。

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

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

以上也意味着:

  1. 您不需要创建新实例,因为它不会被使用;
  2. 同理,设置任何属性(如window标题)都完全没有效果;