QThread 클래스 사용
PyQt5 모듈로 위젯 창을 만들고 화면에 띄우면 이 어플리케이션은 루프를 돌면서
사용자의 액션을 감지하여 이벤트에 대한 처리를 한다.
이 파일 자동 백업 소프트웨어는 필요한 값들을 입력하고 아래 사진의 Run버튼을 누르면
파일 백업 기능을 수행하는데, 이때 스케쥴러 모듈을 이용하여 반복문을 돌면서 백업 스크립트를 실행하게된다.
이런 구조로는 백업 기능은 제대로 하긴 하지만 반복문으로 인해 계속 돌기 때문에
스케쥴러가 실행한 함수의 처리가 끝나야지만 요소의 액션 이벤트가 처리가 된다.
즉, 백업 함수가 실행되는 동안 다른 버튼 같은 요소의 이벤트를 실시간으로 처리할 수가 없는 구조인데
이 문제를 PyQt5의 QThread 클래스를 사용하여 쓰레드 환경을 구축하여 해결하였다.
Thread?
쓰레드란 프로세스의 실행 단위이다.
한 프로세스 내에서 여러 실행 흐름으로 프로세스 내의 데이터를 서로 공유할 수 있다.
이 쓰레드는 각각의 독립적인 작업을 수행하는 역할을 가지고 있다.
QThread 적용
QThread 클래스를 사용하기 위해 import 한 부분이다.
쓰레드를 구현하기 위해 QThread 클래스를 상속받는 클래스를 선언을 해야한다.
이 클래스도 메인 위젯 클래스 처럼 __init__()함수로 초기화를 해줘야 하는데
두번째 인자값에 parent를 넣으면 위젯 클래스의 객체를 상속 받을 수 있다.
34~35LINE을 보면 메인 위젯 객체에 있는 이메일과 앱 비밀번호 입력 창 요소의 텍스트 값을 가져오는 것을 확인할 수 있다.
쓰레드 클래스 선언 후 위젯 객체에 선언했던 쓰레드 클래스를 163LINE처럼 인스턴스 생성을 해주고
버튼 클릭 시 쓰레드 인스턴스의 start메소드를 실행할 수 있도록 연결을 해두면
버튼 클릭 시 해당 쓰레드의 작업이 독립적으로 실행이 된다.
쓰레드 인스턴스의 start는 쓰레드 클래스의 run함수를 실행한다.
이 쓰레드의 역할은 스케쥴러 모듈을 통해 백업함수를 실행하는 것이다.
이렇게 쓰레드 환경을 구현하면 백업 기능이 실행됨과 동시에
요소에 대한 이벤트도 실시간으로 처리할 수 있게 된다.
RESULT
위 결과 화면을 보면 백업 함수가 실행되면서 요소에 대한 이벤트가 실시간으로 처리되는 것을 확인할 수 있다.
이제야 소프트웨어 다운 모습을 갖췄지만 그래도 아직 추가로 손봐야할 점들이 많다.
1. 각 요소에 대한 유효성 검사
2. 에러 발생 부분 수정
3. 스케쥴러 주기 설정 기능
4. 위젯 디자인 수정
...
'Python' 카테고리의 다른 글
[Python] 6. 파일 자동 백업 소프트웨어 만들기 (0) | 2022.01.28 |
---|---|
[Python] 4. 파일 자동 백업 소프트웨어 만들기 (0) | 2022.01.24 |
[Python] 3. 파일 자동 백업 소프트웨어 만들기 (0) | 2022.01.16 |
[Python] 2. 파일 자동 백업 소프트웨어 만들기 (0) | 2022.01.10 |
[Python] 1. 파일 자동 백업 소프트웨어 만들기 (0) | 2021.12.31 |