📜  PyQt5 - 进度条工具提示(1)

📅  最后修改于: 2023-12-03 15:03:56.579000             🧑  作者: Mango

PyQt5 - 进度条工具提示

在 PyQt5 中,可以使用 QProgressBar 来创建进度条。QProgressBar 可以在界面中显示操作的进度,并提供某些事件以跟踪进度。

另外,还可以使用 QToolTip 设置在进度条上的工具提示,以提供更多的信息。

创建进度条

要创建一个进度条,可以使用以下代码:

from PyQt5.QtWidgets import QProgressBar

progress_bar = QProgressBar()

可以将进度条添加到布局中,以使其显示在窗口中。还可以使用 setRange() 方法设置进度条的最小值和最大值,并使用 setValue() 方法设置进度条的当前值。以下是一个示例:

from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar, QVBoxLayout, QWidget


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        progress_bar = QProgressBar()
        progress_bar.setRange(0, 100)
        progress_bar.setValue(50)

        central_widget = QWidget()
        layout = QVBoxLayout()
        layout.addWidget(progress_bar)
        central_widget.setLayout(layout)

        self.setCentralWidget(central_widget)


app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
跟踪进度

进度条还可以发出值改变事件,以便您可以跟踪操作的进度。可以使用 valueChanged 信号来捕获这些事件。以下是一个示例:

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar, QPushButton, QVBoxLayout, QWidget


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.progress_bar = QProgressBar()
        self.progress_bar.setRange(0, 100)

        button = QPushButton('Start')
        button.clicked.connect(self.start_progress)

        central_widget = QWidget()
        layout = QVBoxLayout()
        layout.addWidget(self.progress_bar)
        layout.addWidget(button)
        central_widget.setLayout(layout)

        self.setCentralWidget(central_widget)

    def start_progress(self):
        self.progress_bar.setValue(0)

        for i in range(101):
            self.progress_bar.setValue(i)
            QApplication.processEvents()

注意,为了使进度条更新,需要调用 QApplication.processEvents() 以处理挂起的事件。

工具提示

要在进度条上设置工具提示,可以使用 setToolTip() 方法。以下是一个示例:

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QProgressBar, QWidget


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        progress_bar = QProgressBar()
        progress_bar.setRange(0, 100)
        progress_bar.setValue(50)
        progress_bar.setToolTip('This is the progress bar.')

        central_widget = QWidget()
        central_widget.setToolTip('This is the central widget.')
        central_widget.setMouseTracking(True)
        central_widget.setLayout(QVBoxLayout())
        central_widget.layout().addWidget(progress_bar)

        self.setCentralWidget(central_widget)

    def mouseMoveEvent(self, event):
        print(event.pos())


app = QApplication([])
window = MainWindow()
window.show()
app.exec_()

在这个示例中,我们还将 setMouseTracking() 方法设置为 True,以便在鼠标移动到中央小部件上时打印鼠标位置。