我希望实现以下内容:
我可以在多个驱动器中选择多个文件夹并检索所选文件夹的路径。 Qt只有粗略的多文件夹选择功能,但它不支持其他驱动器等选定的文件夹。
有人可以指导我如何创建这样的对话框吗?更好的是,是否有人可以使用任何示例代码(这是旧项目的扩展,我宁愿节省时间而不是重新发明轮子!)
谢谢
答案 0 :(得分:1)
您可以使用QFileSystemModel代表QTreeView上的代表文件系统。 This example解释了如何做到这一点。
对于复选框问题,根据this list archives:
最简单的方法(我能想到,至少)是子类 QDirModel并覆盖
flags
,data
和setData
:
flags
应将Qt::ItemIsUserCheckable
添加到返回的标志中 如果角色参数为data
,则Qt::CheckState
应返回查询索引的Qt::CheckStateRole
setData
应存储索引的检查状态或者,甚至更好,这应该适用于QProxyModel 同样的方式(毕竟,“赞成对象组成而不是上课 继承“)。
请注意,QDirModel class已过时。您可能不会在较新的Qt版本上使用它。我建议使用QFileSystemModel。
答案 1 :(得分:0)
####### 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()