Конечно, на что указывает OP, зависит от собственного диалога ОС, поскольку в моем менеджере рабочего стола (plasma-KDE) он позволяет мне выполнять обе задачи, например, одним щелчком мыши он позволяет перемещаться по каталогу и с помощью двойной щелчок позволяет редактировать маршрут, а при щелчке правой кнопкой мыши открывается меню, в котором один из параметров позволяет создавать каталоги.
Если проблема связана с собственным диалогом, то вы можете использовать собственный диалог Qt для включите опцию QFileDialog :: DontUseNativeDialog, в которой вы можете перемещаться одним щелчком мыши и, щелкнув правой кнопкой мыши, откроется меню, в котором одно из действий позволяет создать новую папку
from PyQt5 import QtWidgets
def open_or_create_directory(log_dir):
"""
open or create a directory
"""
dialog = QtWidgets.QFileDialog(None, caption='Data Log File Dir')
dialog.setOption(QtWidgets.QFileDialog.DontUseNativeDialog, True)
dialog.setDirectory(log_dir)
dialog.setFileMode(QtWidgets.QFileDialog.ExistingFiles)
dialog.setOption(QtWidgets.QFileDialog.ShowDirsOnly, True)
dialog.setLabelText(QtWidgets.QFileDialog.Accept, "Select")
if dialog.exec_() == QtWidgets.QFileDialog.Accepted:
logdir = dialog.selectedFiles()
print(logdir)
if __name__ == '__main__':
app = QtWidgets.QApplication([])
open_or_create_directory("/path/of/directory")
Если вы посчитайте решение этой ссылки правильным, тогда его легко перевести в python:
dialog = QtWidgets.QFileDialog(self)
dialog.setFileMode(QtWidgets.QFileDialog.Directory)
dialog.setOption(QtWidgets.QFileDialog.DontUseNativeDialog, True)
l = dialog.findChild(QtWidgets.QListView, "listView")
if l is not None:
l.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
t = dialog.findChild(QtWidgets.QTreeView)
if t is not None:
t.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
nMode = dialog.exec_()
names = dialog.selectedFiles()