2012-07-13 2 views
0

선택한 파일의 위치를 ​​Python으로 문자열로 저장하려고합니다. QFileDialog를 사용하여이 작업을 수행하려고합니다.QFileDialog 두 대화 상자 열기

self.filedialog = QtGui.QFileDialog(self) 
self.filedialog.show() 
filepath = str(self.filedialog.getOpenFileName()) 

두 개의 QFileDialog 창이 열립니다. 흥미롭게도, 윈도우 중 하나는 내 GUI의 '스타일'을 상속받지 않으며 setStyle을 설정하지만 파일 경로 문자열은 반환합니다. 다른 QFileDialog는 스타일을 상속하지만 파일 경로 문자열을 반환 할 수 없습니다. QFileDialog documentation이 도움이되었지만 파일 경로 문자열을 생성하고 내 GUI 스타일을 상속하는 QFileDialog 상자를 만들 수 없었습니다. 내가 실수 한거야?

답변

1

실제로 2 개의 창을 만들었습니다.

기능이 QFileDialog.getOpenFileName은 정적입니다. 즉, 자체 QFileDialog 개체를 만들고, 창을 표시하고, 사용자가 파일을 선택하기를 기다리고 선택한 파일 이름을 반환합니다.

당신은 그 라인이 필요합니다 : 당신은 비 네이티브 대화 상자를 사용하는 경우 (QApplication.setStyle과) 응용 프로그램 수준에서 스타일을 설정하면

filepath = str(QFileDialog.getOpenFileName()) 

를, 그것은 윈도우에 적용 할 수 있습니다

filepath = str(QFileDialog.getOpenFileName(options=QFileDialog.DontUseNativeDialog))) 
+0

감사합니다. 훌륭하게 작동했습니다. DontUseNativeDialog는 QFileDialog 객체가 스타일을 상속하는 것을 허용했고, _self_를 getOpenFileName 호출의 첫 번째 인수로 추가했을 때, 그것은 내 gui의 스타일 시트도 상속 받았다. 다시 한 번 감사드립니다! – gortron

1

getOpenFileName"creates a modal file dialog"의 편의 기능입니다. 그래서 두 번째 대화 상자가 나타납니다.

filedialog.exec()을 사용하여 대화 상자를 표시하고 fileDialog.selectedFiles()을 사용하여 파일 이름을 가져옵니다.

+0

Thanks Mark - getOpenFileName을 제거하면 두 개의 창 문제가 해결되었습니다. 선택한 파일의 위치 문자열을 반환하는 데 여전히 문제가 있습니다. filedialog.exec()는 filedialog 객체에 대해 실행 가능한 함수 호출이 아니지만 filedialog.show()로두고면 filedialog.selectedFiles()는 현재 디렉토리의 경로 만 문자열로 반환합니다. – gortron

-1

exec는 파이썬에서 예약어이므로 exec_()를 사용해야합니다.

dialog = QFileDialog(self) 
dialog.exec_() 
for file in dialog.selectedFiles(): 
    print file