python - 如何通过QFileDialog获取pyqt6中的目录路径?

标签 python pyqt

名称:PyQt6
版本:6.1.0

操作系统:Ubuntu 20.04.5 LTS

from PyQt6.QtWidgets import QFileDialog

HOME_PATH = os.getenv("HOME")
...

dir_path = QFileDialog.getExistingDirectory(
    parent=self,
    caption="Select directory",
    directory=HOME_PATH,
    options=QFileDialog.Option.ShowDirsOnly,
)

目录选项不起作用。
初始化路径错误。
文件显示,我无法选择目录。

Directory only fail

最佳答案

最初的问题主要与 PyQt6 使用 Enums 的新方式有关,它现在总是需要完整的命名空间:在 PyQt5 之前,语法 Class.FlagName 就足够了,但 PyQt6 现在需要 Class.EnumName.FlagName.

另一个问题可能与 QTBUG-88709 有关。这是处理操作系统提供的 native 对话框的一系列问题的一部分,这些问题始终取决于系统。

对此没有直接的解决方案,唯一安全的方法是强制执行 DontUseNativeDialog如有疑问,请标记:

dir_path = QFileDialog.getExistingDirectory(
    parent=self,
    caption="Select directory",
    directory=HOME_PATH,
    options=QFileDialog.Option.DontUseNativeDialog,
)

请注意:

  1. ShowDirsOnly 毫无用处,因为只要文件对话框处于 Directory 模式(对于 getExistingDirectory() 自动完成),它总是会被设置静态函数);
  2. 使用非原生对话框显然会与操作系统显示的正常对话框不一致;
  3. 尚不清楚该错误是否在遵循 Ubuntu 20.04 通常使用的环境的 Ubuntu/Gnome 版本中自动解决;
  4. 没有直接的方法仅在需要时强制执行解决方法:要么您找出问题的具体原因,要么您只是假设它不起作用并始终使用非 native 对话框;

关于python - 如何通过QFileDialog获取pyqt6中的目录路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74557955/

相关文章:

python - 没有足够的权限通过 API 修改 Gmail 标签

python - 属性错误 : object has no attribute '_type_equality_funcs'

python - 计算 QTextEdit 中有多少填充行

python - 在表格的每一行旁边添加按钮

python - Pipenv (django) 中的 .env 文件 - ValueError : embedded null character

python - 如何使用 pandas pivot_table 聚合唯一计数

python - 如何修复 Django 中的 "abort"问题?

python - 使用 concurrent.futures.ThreadPoolExecutor 时用户界面卡住

c++ - 调用 CGPathAddArc 时 PyQt4/Qt 中止陷阱的原因是什么?

python - PyQt:更改 QTableView 中复选框的对齐方式