Qt - Выбор нескольких папок / каталогов с помощью диалога - PullRequest
2 голосов
/ 12 августа 2011

Я хочу добиться чего-то вроде следующего:

enter image description here

Где я могу выбрать несколько папок на нескольких дисках и получить пути к папкам из выбранных. Qt имеет только грубую функцию выбора нескольких папок, но не поддерживает выбранные папки с других дисков и т. Д.

Кто-нибудь может подсказать мне, как создать такой диалог? А еще лучше, есть ли какой-нибудь пример кода, который я мог бы использовать (это расширение старого проекта, и я бы предпочел сэкономить свое время и не изобретать колесо!)

Спасибо

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Вы можете использовать QFileSystemModel для представления файловой системы в QTreeView . Этот пример объясняет, как это сделать.

Для вопроса с флажком, согласно этот список архивов :

Самый простой способ сделать это (я думаю, по крайней мере), это создать подкласс QDirModel и переопределить flags, data и setData:

flags должен добавить Qt::ItemIsUserCheckable к возвращенным флагам data должен возвращать Qt::CheckState запрашиваемого индекса, если параметр роли Qt::CheckStateRole setData должен хранить состояние проверки индекса

Или, что еще лучше, это должно работать с QProxyModel в значительной степени таким же образом (в конце концов, «предпочтение композиции объектов перед классом Наследование ").

Обратите внимание, что QDirModel class устарел. Вы не можете использовать это в более новых версиях Qt. Я рекомендую использовать QFileSystemModel .

0 голосов
/ 19 января 2017
####### Retrieve a list of directories with wxPython-Phoenix   - tested on python3.5
### installation instruction for wxPython-Phoenix  : https://wiki.wxpython.org/How%20to%20install%20wxPython#Installing_wxPython-Phoenix_using_pip
### modified from : https://wxpython.org/Phoenix/docs/html/wx.lib.agw.multidirdialog.html
import os
import wx
import wx.lib.agw.multidirdialog as MDD

# Our normal wxApp-derived class, as usual
app = wx.App(0)
dlg = MDD.MultiDirDialog(None, title="Custom MultiDirDialog", defaultPath=os.getcwd(),  # defaultPath="C:/Users/users/Desktop/",
                         agwStyle=MDD.DD_MULTIPLE|MDD.DD_DIR_MUST_EXIST)

if dlg.ShowModal() != wx.ID_OK:
    print("You Cancelled The Dialog!")
    dlg.Destroy()


paths = dlg.GetPaths()

#Print directories' path and files 
for path in enumerate(paths):
    print(path[1])
    directory= path[1].replace('OS (C:)','C:')
    print(directory)
    for file in os.listdir(directory):
        print(file)

dlg.Destroy()
app.MainLoop()
...