Pyside2 (Qt For Python) プログレスバー関数の実装

Pyside2 (Qt For Python) プログレスバー関数の実装

プログレスバー (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()setMinimum()を使用して指定できます。デフォルト値は 0 と 99 です。

    • 現在のステップは**setValue()** によって設定されます
    • プログレスバーは、 reset()メソッドを通じて再開できます。
  • 最小値と最大値の両方が 0、つまり setRange(0, 0) に設定されている場合、以下に示すように、バーにはステップのパーセンテージの代わりにビジー インジケーターが表示されます。

    画像

プログレスバーの高度な例

通常、進行状況バーを使用するときは、特定のタスクの進行状況に関連付けられます。一般的な状況が 2 つあります。

  • データとバインドします。たとえば、操作の対象が大量のデータである場合、プログレス バーの範囲をデータの合計量に設定できます。対応するデータ量が増加するたびに、プログレス バーが更新されます。走る。

    • 以下は、データ ボリュームとプログレス バーをバインドするコード例です。
    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