본문 바로가기
Python/PySide PyQt

[PySide6] QProgressBar

by ds31x 2024. 4. 29.

QProgressBar

Constructor (생성자)

QProgressBar(parent=None)
  • QProgressBar widget의 인스턴스를 생성.
  • parent parameter는 부모 위젯을 지정 (생략 가능).
  • 선택적으로 minimum과 maximum을 argument로 할당해서 범위를 설정할 수 있음.
QProgressBar(parent, minimum, maximum)

Methods (메서드)

setValue(value)

progressBar.setValue(value)
  • QProgressBar widget의 값을 설정.
  • value parameter는 QProgressBar widget의 현재 진행률 값.

setMinimum(minimum)

progressBar.setMinimum(minimum)
  • QProgressBar widget의 최소값을 설정.
  • minimum 매개변수는 QProgressBar widget의 최소값.

setMaximum(maximum)

progressBar.setMaximum(maximum)
  • QProgressBar widget의 최대값을 설정합니다.
  • maximum 매개변수는 QProgressBar widget의 최대값.

reset()

progressBar.reset()
  • QProgressBar widget의 값을 초기 상태로 재설정.
  • 진행률 바의 값을 minimum으로 설정(명시적으로 설정하지 않은 경우 0).

Example

이 코드는 PySide6를 사용하여 QProgressBar를 포함하고 있는 PyQt Application을 생성하는 예제.

import sys

from PySide6.QtWidgets import (
    QApplication, 
    QMainWindow, 
    QProgressBar, 
    QPushButton,
    QWidget, QVBoxLayout,
)
from PySide6.QtCore import QTimer

class MW(QMainWindow):

    def __init__(self):
        super(MW, self).__init__()
        self.setWindowTitle("ex: QProgressBar")
        self.setGeometry(200, 200, 300, 150)

        self.progressBar = QProgressBar(minimum=0, maximum=10)
        self.progressValue = self.progressBar.minimum()
        # self.progressBar.setGeometry(50, 50, 200, 30) # absolute positioning

        self.startButton = QPushButton("start")
        self.startButton.clicked.connect(self.startProgress)
        # self.startButton.setGeometry(100, 100, 100, 30) # absolute positioning

        self.timer = QTimer()
        self.timer.timeout.connect(self.updateProgress)        

        lm = QVBoxLayout()
        lm.addWidget(self.progressBar)
        lm.addWidget(self.startButton)

        tmp = QWidget()
        tmp.setLayout(lm)

        self.setCentralWidget(tmp)
        self.show()

    def startProgress(self):
        self.progressBar.reset()
        self.progressValue = self.progressBar.value()
        self.startButton.setEnabled(False)
        # self.progressBar.setValue(self.progressValue)
        self.timer.start(100)  # 100 milliseconds마다 타이머 발생

    def updateProgress(self):
        self.progressValue += 1
        self.progressBar.setValue(self.progressValue)
        if self.progressValue >= self.progressBar.maximum():
            self.timer.stop()
            # self.progressBar.reset()
            self.startButton.setEnabled(True)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MW()
    sys.exit(app.exec())
  1. 기본 설정:
    • MW 클래스는 QMainWindow를 상속하며, PySide6 애플리케이션의 main window에 해당.
    • 창의 제목과 크기를 설정합니다.
  2. 프로그레스 바 및 버튼 생성:
    • self.progressBar 변수에 QProgressBar 위젯 객체를 할당: 최소값은 0으로, 최대값은 10으로 설정.
    • self.progressValue 변수를 사용하여 self.progressBar 객체의 현재 값(진행률)을 추적.
    • self.startButton 변수에 QPushButton 위젯 객체를 할당: 버튼에는 "start" 텍스트가 표시.
    • QVBoxLayout 객체를 통해 프로그레스 바와 버튼을 수직으로 배치.
  3. 시작 버튼 클릭 시 작업:
    • startProgress 메서드는 "start" 버튼이 클릭시 호출 (즉, slot임).
    • 프로그레스 바를 초기 상태로 재설정하고, 현재 값(진행률)을 초기값으로 설정.
    • "start" 버튼을 비활성화합니다.
    • QTimer 객체를 시작하여 일정 시간 간격으로 프로그레스 바를 업데이트하기 위한 signal발생.
  4. 프로그레스 바 업데이트:
    • updateProgress 메서드는 QTimer 객체의 timeout signal이 발생할 때마다 호출.
    • 현재 값(진행률)을 증가시키고, 프로그레스 바의 값을 해당 값으로 설정.
    • 만약 현재 값이 최대값에 도달하면, QTimer를 중지하고 프로그레스 바를 초기 상태로 재설정한 후 "start" 버튼을 다시 활성화합니다.
  5. 애플리케이션 실행:
    • __main__ 블록에서 QApplication을 생성하고 MW 클래스의 인스턴스를 생성하여 애플리케이션을 실행.

더 읽어보면 좋은 자료들.

https://wikidocs.net/21941

 

07) QProgressBar

![](https://wikidocs.net/images/page/21941/4_8_qprogressbar_sample.png) ![ ](https://wikidocs.net/…

wikidocs.net

https://wikidocs.net/90736

 

01) 타이머

[TOC] ## 타이머 개발하는 프로그램에서 1초에 한 번 주기적인 작업을 해야하는 경우 PyQt의 QTimer 클래스를 사용하면 좋습니다. ![](https://wik…

wikidocs.net