MapleStory Finger Point

Development/GUI

PyQt5 종료 Fade out 이벤트

吳鍾振 2021. 7. 8. 13:40

라고 제목을 거창하게 적어보았지만 사실은 페이크다.

마음 같아서는 animation 함수 (QPropertyAnimation)를 사용해서 해보고 싶었지만, 그런 마음은 접어두기로 한다.

코드는 아주 간단하다. 이걸 글로 써서 올리기에 창피할 정도

import sys
import time
from PyQt5.QtWidgets import QWidget, QApplication, QGraphicsOpacityEffect, QPushButton, QVBoxLayout


class FadeWindow(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        button = QPushButton(self)
        button.setText("Close")

        button.resize(200, 200)
        button.clicked.connect(self.fade)

        layout = QVBoxLayout(self)
        layout.addWidget(button)

        self.resize(300, 300)

    def fade(self):
        for i in range(100):
            i = i / 100
            self.setWindowOpacity(1 - i)
            time.sleep(0.005)
        self.close()

    def close(self):
        sys.exit()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = FadeWindow()
    window.show()
    sys.exit(app.exec_())

 


이게 끝이다.

Close 버튼을 누르면 fade 함수를 실행한다.

fade 함수에서는 i를 100이 될 때까지 반복하는데 i값을 100으로 나눠준다.

그러면 0.01씩 증가하여 1까지 되는데, 여기서 QWidget의 setWindowOpacity()에 값을 넣어준다.

setWindowOpacity 함수로 창의 투명도를 조절할 수 있다.

값은 1일 때 투명도 0%, 0일 때 투명도 100%이다.

이렇게 setWindowOpacity에 i - 1의 인자를 넣어주면 투명도가 0.01씩 감소한다.

그리고 for 반복문의 속도가 빠르기 때문에 time.sleep으로 딜레이를 걸어주어야 페이드 아웃되는 기분을 느낄 수 있다.

아래에 Gif 파일을 첨부하였는데 찍는데 프레임이 낮게 나와서 그렇지 실제로 위 코드를 실행해보면 되게 부드럽다!

이상하게 별거 아닌데 되게 멋있다.

반응형

'Development > GUI' 카테고리의 다른 글

QSettings 로그인 알고리즘  (2) 2023.02.21
QSettings 사용 예제 코드  (0) 2022.07.26
PyQt5 이미지 비율 맞추기  (0) 2022.06.20
PyQt5 버튼 애니메이션  (0) 2022.06.15
PyQt5 메뉴바 클릭 시 텍스트 변경해보기  (0) 2020.09.21