2016-07-27 2 views
1

나는 다음과 같은 코드를 사용하여 내 자신의 사용자 정의 파일 대화 상자를 만드는거야 :QFileDialog 폴더 및 파일을 보지만 폴더 만 선택합니까?

file_dialog = QtGui.QFileDialog() 
file_dialog.setFileMode(QtGui.QFileDialog.Directory) 
file_dialog.setViewMode(QtGui.QFileDialog.Detail) 
file_dialog.setOption(QtGui.QFileDialog.DontUseNativeDialog, True) 

i는 사용자가 파일 및 폴더 만 선택 폴더에만 모두 볼 수 있도록하기위한 것입니다에 관심이 동작을. (파일을 선택 취소 할 수 있음). 그게 가능하니?

참고 : 당신이 파일 만, 폴더를 보는 것을 허용하지 않기 때문에 DirectoryOnly 옵션을 사용하여이 나를 위해 좋지 않다.

편집 (내가 여러 폴더 대신 하나를 선택 할 수있는 대한 책임이있는 추가하는 것을 잊었다 추가 코드) : 파일이 선택되는 것을 방지하기 위해

file_view = file_dialog.findChild(QtGui.QListView, 'listView') 
if file_view: 
    file_view.setSelectionMode(QtGui.QAbstractItemView.MultiSelection) 
f_tree_view = file_dialog.findChild(QtGui.QTreeView) 
if f_tree_view: 
    f_tree_view.setSelectionMode(QtGui.QAbstractItemView.MultiSelection) 
+0

게시 한 코드가 원하는대로 정확하게 수행됩니다 (예 : 사용자가 파일 및 디렉터리를 볼 수 있지만 디렉터리 만 선택할 수 있음). 어쩌면 당신이 원하는 것을 더 명확하게 설명 할 필요가있을 것입니다. – ekhumoro

+0

위 코드는 파일을 선택할 수있게 해줍니다. – YaronGh

+0

나를 위해 "Choose"버튼은 디렉토리를 선택할 때만 활성화됩니다. * 파일을 선택할 수는 있지만 선택할 수는 없습니다 (버튼이 비활성화되어 있기 때문에). – ekhumoro

답변

2

, 프록시 모델을 설치할 수있는

class ProxyModel(QtGui.QIdentityProxyModel): 
    def flags(self, index): 
     flags = super(ProxyModel, self).flags(index) 
     if not self.sourceModel().isDir(index): 
      flags &= ~QtCore.Qt.ItemIsSelectable 
     return flags 


# keep a reference somewhere to prevent core-dumps on exit 
self._proxy = ProxyModel(self) 

file_dialog.setProxyModel(self._proxy) 
+0

좋습니다. 나는 그것에 대해 새로운 질문을 열어야할지 모르겠다. (나에게 알려주기 바란다.) 그러나 폴더와 파일을 모두 선택할 수 있도록 위의 코드를 만들 수있는 빠른 수정이 있는가? – YaronGh

+1

@ YaronGh. 'file_dialog.setProxyModel (없음)'. – ekhumoro

+0

내가 그렇게하면 선택한 파일 + 그 폴더에있는 다른 모든 파일을 반환합니다 – YaronGh

관련 문제