PyQt プログレスバー ①

PyQt プログレスバー ①

QProgressBarを簡単に使う

今回はQProgressBarを使って、どれくらいタスクが進行しているのかを表示する部分を作ろうと思います。

しかし、このプログレスバーというのは、シグナルやタイマーなどのQThread周りの機能を使うのが普通です。

スレッド的に動いているPyQtなので、「スレッド管理」というのはわかる気がします。

ただ、そこまでのことがしたいわけではなく、見た目的に必要としている場合もあるはずです。

値を直接書き換えてしまう

おそらくこの方法が最もわかりやすいと思います。

ただし、プログレスバーの基本は抑える必要があるので、そちらについては詳細を書いていきます。

では、ソースコードです。

ソースコード



from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_Form(object):
	def setupUi(self, Form):
		Form.setObjectName("Form")
		Form.resize(530, 240)
		self.progressBar = QtWidgets.QProgressBar(Form)
		self.progressBar.setGeometry(QtCore.QRect(30, 20, 480, 70))
		font = QtGui.QFont()
		font.setPointSize(26)
		self.progressBar.setFont(font)
		self.progressBar.setMaximum(10)
		self.progressBar.setProperty("value", 0)
		self.progressBar.setTextVisible(True)#値の表示
		self.progressBar.setObjectName("progressBar")

		self.pushButton = QtWidgets.QPushButton(Form)
		self.pushButton.setGeometry(QtCore.QRect(180, 130, 180, 60))
		self.pushButton.setFont(font)
		self.pushButton.setObjectName("pushButton")

		self.retranslateUi(Form)
		self.pushButton.clicked.connect(Form.button_click)
		QtCore.QMetaObject.connectSlotsByName(Form)

	def retranslateUi(self, Form):
		_translate = QtCore.QCoreApplication.translate
		Form.setWindowTitle(_translate("Form", "Form"))
		self.progressBar.setFormat(_translate("Form", "%v/%m"))
		self.pushButton.setText(_translate("Form", "Push"))

class progress_main(QtWidgets.QDialog):
	def __init__(self,parent=None):
		QtWidgets.QDialog.__init__(self,parent)
		self.progress=Ui_Form()
		self.progress.setupUi(self)
		self.progress.retranslateUi(self)
		self.num =0
	def button_click(self):
		self.num +=1
		self.progress.progressBar.setProperty("value", self.num)
		if self.num == 11:
			self.close()
	

if __name__ == '__main__':
	app = QtWidgets.QApplication(sys.argv)
	window = progress_main()
	window.show()
	
	app.exec_()

動作

ボタンをクリックすると+1ずつされプログレスバーの表示も変化します。
最大値に到達したあとにボタンを押すとダイアログを閉じます。

初期状態
ボタン押下後

詳細

※QtDesignerを使って書いているので、基本的にはそのまま使うことが望ましいです。

self.progressBar.setMaximum(10)
self.progressBar.setProperty("value", 0)
self.progressBar.setTextVisible(True)

setMaximum()で値の最大値を設定。

setProperty()で値を設定(現在値だと思えばわかりやすいです)
初期化の時には0を入れています。

setTextVisible(True)で値の表示
Falseにすると値の部分がなくなり、その分バーが伸びます。

self.progressBar.setFormat(_translate("Form", "%v/%m")

これを書くことでsetMaximumとsetPropertyで設定した値が表示されます
%vは現在値 %mは最大値(setMaximumの値)

終わりに

このプログラムの応用の仕方としては、ボタンのクリックによって呼び出している関数を順次処理の途中に入れ込む、だと思います。

ただし、このやり方は正しいわけではありません。
もっとちゃんとした綺麗なやり方は別にあります。

見た目だけでもいい!、という人はこの程度でいいと思っています。
私なんかがまさしくそれですね。

次回はこの続きとして、それっぽく見せるパート②を書きます。

興味がある方は是非見てくださいね!

ではまた~

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です