본문 바로가기
PySide or PyQt

QFileDialog.getOpenFileName()을 사용해서 디렉터리만 선택해 그 경로를 가져오는 코드

by 르면가게 2025. 2. 20.

QFileDialog.getOpenFileName()은 파일을 선택하는 다이얼로그이므로, 디렉터리만 선택하려면 QFileDialog.getExistingDirectory()를 사용하는 것이 일반적입니다. 하지만 QFileDialog.getOpenFileName()을 사용하면서 디렉터리만 선택하는 방법을 원한다면, 특정 옵션을 조정하여 가능하게 만들 수 있습니다.

방법 1: QFileDialog.getExistingDirectory() 사용 (권장)

from PySide6.QtWidgets import QApplication, QFileDialog
import sys

app = QApplication(sys.argv)

directory = QFileDialog.getExistingDirectory(None, "Select Directory", "")
if directory:
    print("Selected directory:", directory)
  • 설명: QFileDialog.getExistingDirectory()는 사용자가 폴더만 선택할 수 있도록 합니다.
  • 장점: 사용자가 실수로 파일을 선택하는 것을 방지할 수 있음.

방법 2: QFileDialog.getOpenFileName() 사용하여 디렉터리 선택

from PySide6.QtWidgets import QApplication, QFileDialog
import sys

app = QApplication(sys.argv)

file_path, _ = QFileDialog.getOpenFileName(None, "Select Directory", "", "Directories (*)")
if file_path:
    import os
    directory = os.path.dirname(file_path)
    print("Selected directory:", directory)
  • 설명: 파일을 선택하는 다이얼로그에서 사용자가 디렉터리를 클릭하여 getOpenFileName()을 실행하게끔 함.
  • 단점: 사용자가 디렉터리를 선택하려면 내부의 파일을 클릭해야 할 수도 있음.

방법 3: QFileDialog 설정을 직접 조정

from PySide6.QtWidgets import QApplication, QFileDialog
import sys

app = QApplication(sys.argv)

dialog = QFileDialog()
dialog.setFileMode(QFileDialog.Directory)
dialog.setOption(QFileDialog.ShowDirsOnly, True)

if dialog.exec():
    selected_dir = dialog.selectedFiles()[0]  # 선택된 디렉터리 경로 가져오기
    print("Selected directory:", selected_dir)

 

  • 설명: QFileDialog를 직접 생성한 후, setFileMode(QFileDialog.Directory)와 setOption(QFileDialog.ShowDirsOnly, True)를 설정하여 디렉터리만 선택하도록 조정.
  • 장점: getExistingDirectory()와 동일한 방식이지만, 더 세밀한 설정이 가능.

결론

디렉터리 선택이 목적이라면 QFileDialog.getExistingDirectory()를 사용하는 것이 가장 깔끔하고 직관적입니다.
✅ QFileDialog.getOpenFileName()을 반드시 써야 한다면 os.path.dirname()을 활용하여 경로를 추출하는 방법이 있음.
커스텀 설정이 필요하다면 QFileDialog() 인스턴스를 생성하여 setFileMode(QFileDialog.Directory)를 설정하는 것이 좋음.