PyQt5 - (Qt designer) QFileDialog 를 이용하여 여러파일 이름 출력
본문 바로가기
파이썬(Python)/파이썬 GUI(PyQt5 & tkinter)

PyQt5 - (Qt designer) QFileDialog 를 이용하여 여러파일 이름 출력

by Squat Lee 2020. 12. 17.

Qt designer와 QFileDialog를 이용하여 여러 파일의 이름을 출력해 보겠습니다.

 

우선 Qt designer에서 아래와 같이 Dialog와 버튼, textEdit을 만듭니다.

(lineEdit이 아니라 textEdit을 사용하였으니 유의하시기 바랍니다.)

 

import sys

from PyQt5.QtWidgets import *

from PyQt5 import uic

 

필요한 모듈을 불러옵니다.

 

test_ui = r'C:\Users\Administrator\Desktop\Test.ui'

 

만들어진 UI 파일의 경로를 'test_ui'라는 변수에 넣습니다.

 

class MainDialog(QDialog):

    def __init__(self):

        QDialog.__init__(selfNone)

        uic.loadUi(test_ui, self)

 

QDialog 클래스를 상속받아 MainDialog 클래스를 만들고 시작하게 합니다.

그리고 만들어진 UI를 Load 해 줍니다.

 

self.PushButton1.clicked.connect(self.Button_click)

 

푸쉬버튼이 클릭되면 동작을 할 수 있도록 연결합니다.

 

    def Button_click(self):

        file_names = QFileDialog.getOpenFileNames(self)

 

버튼이 클릭되면 QFileDialog 에서 getOpenFileNames 라는 속성을 사용해서 여러 파일을 선택할 수 있습니다.

각각의 파일이름은 'file_names' 변수에 듀플형태로 저장됩니다.

 

        for file in file_names[0]:

            exist = self.textEdit.toPlainText()

            self.textEdit.setText(exist + file + '\n')

 

'file_names[0]'은 파일이름만 List 형태로 표시됩니다.

For문을 사용하여 각각의 파일 이름이 textEdit에 표시됩니다.

 

※ lineEdit은 한 줄만 입력이 되는데 반해, textEdit은 여러줄 입력이 가능합니다.

 

전체 코드는 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic
 
test_ui = r'C:\Users\Administrator\Desktop\Test.ui'
 
class MainDialog(QDialog):
    def __init__(self):
        QDialog.__init__(selfNone)
        uic.loadUi(test_ui, self)
 
        self.PushButton1.clicked.connect(self.Button_click)
 
    def Button_click(self):
        file_names = QFileDialog.getOpenFileNames(self)
 
        for file in file_names[0]:
            exist = self.textEdit.toPlainText()
            self.textEdit.setText(exist + file + '\n')
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    Dialog = MainDialog()
    Dialog.show()
    app.exec_()
cs

 

아래는 실행 화면입니다.

 

728x90
반응형

댓글