Qt/PyQt5 강좌

프로그레스 바(QProgressBar)를 제어하는 간단한 PyQt5 예제

webnautes 2024. 8. 31. 06:01
반응형

프로그레스 바(QProgressBar)를 제어하는 간단한 PyQt5 예제입니다. 



2024. 8. 31 최초작성




시작 버튼을 클릭하면 프로그레스 바가 진행되면서 파란색 영역이 채워지다가 정지 버튼을 클릭하면 멈춥니다. 

초기화 버튼을 클릭하면 프로그레스 바가 초기화됩니다.

100% 채우기 버튼을 클릭하면 프로그레스 바가 꽉차게 됩니다. 

 



전체 코드입니다.

 

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QProgressBar, QVBoxLayout
from PyQt5.QtCore import QTimer, QObject, pyqtSignal

class ProgressBarController(QObject):
    progress_complete = pyqtSignal()

    def __init__(self, progress_bar):
        super().__init__()
        self.progress_bar = progress_bar
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_progress)

    def start(self):
        if not self.timer.isActive():
            self.timer.start(100)

    def stop(self):
        self.timer.stop()

    def reset(self):
        self.stop()
        self.progress_bar.setValue(0)

    def fill(self):
        self.progress_bar.setValue(100)
        self.stop()
        self.progress_complete.emit()

    def update_progress(self):
        current_value = self.progress_bar.value()
        if current_value < 100:
            self.progress_bar.setValue(current_value + 1)
        else:
            self.stop()
            self.progress_complete.emit()

class ProgressBarApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('프로그레스 바 예제')
        self.setGeometry(300, 300, 300, 200)

        layout = QVBoxLayout()

        self.progress_bar = QProgressBar(self)
        self.progress_bar.setMaximum(100)
        layout.addWidget(self.progress_bar)

        self.controller = ProgressBarController(self.progress_bar)

        self.start_button = QPushButton('시작', self)
        self.start_button.clicked.connect(self.controller.start)
        layout.addWidget(self.start_button)

        self.stop_button = QPushButton('정지', self)
        self.stop_button.clicked.connect(self.controller.stop)
        layout.addWidget(self.stop_button)

        self.reset_button = QPushButton('초기화', self)
        self.reset_button.clicked.connect(self.controller.reset)
        layout.addWidget(self.reset_button)

        self.fill_button = QPushButton('100% 채우기', self)
        self.fill_button.clicked.connect(self.controller.fill)
        layout.addWidget(self.fill_button)

        self.setLayout(layout)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = ProgressBarApp()
    ex.show()
    sys.exit(app.exec_())

 

반응형