ㄴ Python

3월 18일 (QTDesigner, 파일 및 디렉토리)

깜자왕 2022. 3. 18. 15:36
반응형

 

1. 파일 입출력(3월 17일 연장)

   1-1. 표준 출력 전환

   -> 로그, 에러 등을 기록할 때 활용 가능하다

 

   1-2. 다른 자료형의 파일 입출력

   -> 기존 파일 입출력은 단순 텍스트만 파일로 입출력 가능

   -> 다른 자료형의 '형태'를 그대로 유지하면서 파일저장을 위해 pickle 모듈 활용

사전형의 형태는 그대로 유지하나 'str'형인 것을 확인할 수 있다

   -> pickle 모듈로 파일을 저장할 때는 바이너리형식으로 입출력해야 한다(wb, rb모드)

   -> 파이썬의 모든 객체들을 그대로 저장 가능

wb로 저장하는 법
위 사진에 대한 a.txt의 내용
a.txt의 내용을 rb로 값을 읽어오는 과정 (dict 형식)

 

 

2. 파일 및 디렉토리 다루기

   2-1. 파일 다루기

   -> listdir (해당 디렉토리에 있는 파일들 나열)

리눅스에서 "." 은 현재 디렉토리니까 현재 디렉토리에 있는 파일들을 나열한다.
현재 디렉토리에 있는 파일들

   -> rename (파일 이름 변경)

b1 -> b로 이름 변경

   -> os.path.exists (파일 유무 확인)

   * 내가 지금 작업하는 경로를 기준 (상대경로)

   * 루트를 기준으로 하는 경로 (절대경로)

 

   -> path.abspath (파일 유무와 상관없이 절대경로 반환)

abspath는 절대경로 반환이므로 루트를 기준인 경로가 출력됨

   -> basename, dirname, split 함수 (각각 파일명만, 경로만, 경로와 파일명 반환)

순서대로 파일명만, 경로만, 경로와 파일명 반환

 

   -> splitdrive, splitext (경로에서 드라이브, 확장자를 분리) (주로 저장된 드라이브가 다르거나 확장자가 다를경우 사용)

순서대로 드라이브, 확장자 분리해서 반환

 

   2-2. 디렉토리 다루기

   -> getcwd() (현재 작업중인 디렉토리 반환)

   -> mkdir() (새로운 폴더 생성)

 


연습문제

표준출력을 파일로 변경해서 구구단의 원하는 단을 파일에 저장하는 코드 작성

sys.stdout으로 표준출력을 작성하고 그 아래에 기입을 원하는 내용을 입력한다. 그 후 f.close()로 닫아준다
3을 입력하자 3단만 출력되는 모습

 


Qt Designer

리눅스 터미널에서 designer 입력

 

Main Window 생성 - Containers 의 Tab widget 등록 후 화면에 맞춘다

 

속성 - currentTabText에서 Tab1의 텍스트 변경

 

좌측의 Label 등록 후 원하는 사진 다운로드(리눅스 자체 또는 winscp) - Label 클릭 후 TextFormat - RichText 선택 후 pixmap에서 그림파일 선택

 

해당 ui 파일을 파이썬 작업 디렉토리에 저장

 

이제 Pycharm에 들어간 후 pyuic5 main.ui -o main.py 명령 (pyuic5는 만든 ui를 py파일로 변환시키는 명령어)

오류날 경우 sudo apt install pyqt5-dev-tools 명령 (설치)

설치 완료 후 다시 pyuic5 명령어 수행

좌측의 main.py 클릭 시 아래같이 변환된 코드 확인

 

소스코드를 확인한 후 Terminal에 pip install pyqt5 입력한 후 설치

settings - python interpreter 에서 pyqt5 설치 확인

이 탭을 Run 해준 후 아래와 같이 작성한다. (designer에서 작업한 소스코드를 얻었으므로 이를 실행시키기 위한 코드를 작성한 것이다.)

코드
결과

 

Label, TextEdit, LineEdit(echoMode-Password 설정), Plain Text Edit 활용해서 아래와 같이 만든다.

 

저장 후 pycharm에서 똑같이 Terminal에서 pyuic5를 실행한다.

main.ui -> main01.py 변환
결과

 

 

이제 실행버튼을 눌렀을 때 반응을 나타내기 위해 일단은 소스코드에 아래와 같이 추가한다.

pushButton 부분을 찾아 추가한다. clickExec를 실행시키기 위해 아래 사진처럼 실행시킬 함수와 내용을 추가한다.
clickExec(self): 를 함수정의해준다.

 

Run 한 후 MainWindow의 실행버튼을 누르면 아래 Run 탭에 결과가 나오게 됨

 

이제 버튼을 눌렀을 시 이벤트를 발생시키기 위해 def clickExec(self): 부분을 추가수정한다.

우선 구구단 부분은 주석처리한다


연습문제

1. 아이디와 비밀번호가 일치할 시 PlainText에 구구단을 출력하고, 버튼을 누를때마다 초기화되게 해라

-> 구구단을 출력하는 함수를 따로 만든 뒤, 아이디와 비밀번호가 일치할 시의 if문에 구구단 출력 함수를 self.gugudan()으로 불러온다.

print 대신 appendPlainText 로 사용

 

2번째 방법

우선 메모장에 구구단을 작성하고, 이 것을 PlainTextEdit에 불러오는 방법을 해본다

메모장에 구구단 작성하는 test()함수, stdout에서 꼬이기 때문에 write()함수를 이용해 작성
아이디와 비밀번호가 맞을 시 self.test()로 실행한 후 이를 읽어오는 f.read() 함수로 적용한다

 

https://wikidocs.net/35492 - 함수 관련 페이지 참고

 

2. 사용자와 암호를 입력하고 PlainText에 내용을 적은 후, 전송시킬 파일이름을 적은 후 전송버튼을 누르면 해당 파일에 내용이 입력되게 하라

우선 파일을 만들어 PlainTextEdit 박스 안의 텍스트를 불러와 저장하는 함수를 만든다
사용자, 패스워드, 파일이름이 모두 일치할 경우 위 test()함수를 불러와 메모장에 저장시킨다. 그 후 PlainTextEdit을 clear()하고 결과를 출력한다