Pyside2(Python용 Qt) 진행률 표시줄 기능 구현

Pyside2(Python용 Qt) 진행률 표시줄 기능 구현

진행률 표시줄(QProgressBar)

오늘은 아래와 같이 PySide2 진행률 표시줄( QProgressBar ) 사용을 소개하겠습니다 .
여기에 이미지 설명을 삽입하세요.

설명하다

진행률 표시줄은 일반적으로 사용되는 컨트롤이기도 하며, 프로그램이 시간이 많이 걸리는 작업(예: 통계, 파일 다운로드 등)을 수행해야 할 때 사용자에게 작업 진행 상황을 표시하는 데 사용할 수 있습니다 . 그리고 진행률 표시를 통해 사용자는 애플리케이션이 여전히 실행 중이고 문제가 없음을 알 수 있습니다.

QProgressBar 진행 표시줄은 각 진행 상황을 단계로 호출합니다.

다음과 같은 메소드를 통해 setRange단계 수를 설정할 수 있습니다.

progressBar.setRange(0,10)

위의 코드는 진행 상황을 5단계로 나눕니다. 그런 다음 setValue메서드를 사용하여 현재 완료된 단계를 지정합니다. 예를 들면 다음과 같습니다.

progressBar.setValue(7)

이는 7/10이 완료되었음을 의미하며, 이는 70%이며 진행률 표시줄에 70% 진행률이 표시됩니다.

진행률 표시줄 프로그램 샘플 코드
import time
from PySide2.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QProgressBar
from PySide2.QtCore import QThread, Signal

class Worker(QThread):
    progress = Signal(int)

    def run(self):
        for i in range(101):
            time.sleep(0.1)  # 模拟耗时操作
            self.progress.emit(i)

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("进度条")
        self.setGeometry(100, 100, 300, 150)

        self.central_widget = QWidget(self)
        self.setCentralWidget(self.central_widget)

        self.layout = QVBoxLayout()
        self.central_widget.setLayout(self.layout)

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

        self.button = QPushButton("开始", self)
        self.button.clicked.connect(self.start_process)
        self.layout.addWidget(self.button)

    def start_process(self):
        self.worker = Worker()
        self.worker.progress.connect(self.update_progress)
        self.worker.start()

    def update_progress(self, value):
        self.progress_bar.setValue(value)

if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()
  • 최소 및 최대 단계는 setMinimum()setMaximum() 을 사용하여 지정할 수 있으며 기본값은 0과 99입니다.

    • 현재 단계는 **setValue()**에 의해 설정됩니다.
    • 진행 표시줄은 Reset() 메서드를 통해 다시 시작할 수 있습니다.
  • 최소값과 최대값이 모두 0으로 설정된 경우(예: setRange(0, 0)) 아래와 같이 막대에 단계 비율 대신 사용 중 표시기가 표시됩니다.

    img

진행률 표시줄 고급 예

일반적으로 진행률 표시줄을 사용하면 특정 작업 진행 상황에 바인딩되는 경우가 많습니다. 두 가지 일반적인 상황이 있습니다.

  • 데이터와 바인딩합니다. 예를 들어 연산의 대상이 대용량 데이터인 경우 진행 막대의 범위를 전체 데이터 양으로 설정할 수 있습니다. 해당 데이터 양이 나올 때마다 진행 막대가 업데이트됩니다. 달리다.

    • 다음은 데이터 볼륨과 진행률 표시줄을 바인딩하는 코드 예제입니다.
    total_rows = len(list(sheet1.iter_rows()))  # 获取总行数
    current_row = 0 # 设置当前运行行数
    
    current_row += 1 # 每运行一行,变量自动+1
    progress = int(current_row / total_rows * 100)
    compareWin.update_progress_bar(100)  # 更新进度条
    
  • 동일한 스레드에 바인딩 현재 프로젝트가 여러 스레드에서 실행되는 경우 진행률 표시줄을 해당 스레드에 바인딩하여 프로그램 실행 상태를 실시간으로 반영할 수 있습니다. 다음은 스레드를 진행률 표시줄에 바인딩하는 코드 예제입니다. .

    import sys
    from PySide2.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QProgressBar
    from PySide2.QtCore import QThread, Signal
    
    class WorkerThread(QThread):
      # 定义一个信号,用于更新进度条
      update_progress = Signal(int)
    
      def run(self):
        for i in range(101):
          # 发送信号,更新进度条
          self.update_progress.emit(i)
          self.msleep(50)  # 模拟耗时操作
    
    class MainWindow(QWidget):
      def __init__(self):
        super().__init__()
    
        self.initUI()
    
      def initUI(self):
        self.setWindowTitle('进度条和线程绑定示例')
        self.setGeometry(100, 100, 400, 200)
    
        # 创建垂直布局
        layout = QVBoxLayout(self)
    
        # 创建进度条
        self.progress_bar = QProgressBar(self)
        layout.addWidget(self.progress_bar)
    
        # 创建按钮,点击按钮启动线程
        self.start_button = QPushButton('开始', self)
        self.start_button.clicked.connect(self.startThread)
        layout.addWidget(self.start_button)
    
        self.setLayout(layout)
    
      def startThread(self):
        # 创建线程实例
        self.thread = WorkerThread()
    
        # 将线程的信号连接到更新进度条的槽函数
        self.thread.update_progress.connect(self.updateProgressBar)
    
        # 启动线程
        self.thread.start()
    
        # 禁用按钮,防止多次点击
        self.start_button.setEnabled(False)
    
      def updateProgressBar(self, value):
        # 更新进度条的值
        self.progress_bar.setValue(value)
    
        # 如果进度达到100%,启用按钮
        if value == 100:
          self.start_button.setEnabled(True)
    
    if __name__ == "__main__":
      app = QApplication(sys.argv)
      window = MainWindow()
      window.show()
      sys.exit(app.exec_())
    
    

추천

출처blog.csdn.net/H931053/article/details/134806770