PyQt系ライブラリでwidgetの動的変化が出来ない問題の解決方法
PyQt系ライブラリの、ライセンスフリーであるPyside6を使用したときに気付いたことを備忘録的に書いています。
widgetの動的変化を行う方法は二つあり、
作成した関数の終了時に更新され、動的変化する
QApplication.processEvents()を呼び出して動的変化する
の二種類があります。
setText()等を呼び出しただけだとwidgetの更新が出来ないのが厄介な点ですが、これで解決することは出来ます。
まあ、正直PythonでGUIを作るならcustomtkinter、flet等を使った方が楽だと思いますが…
コード例を以下に置いておきます。
from PySide6.QtWidgets import QApplication, QPushButton, QVBoxLayout, QLabel, QWidget
from PySide6.QtGui import Qt
import time
class MainWindow(QWidget):
def __init__(self):
super().__init__()
#ウィジェットの呼び出し
self.SetLabel()
self.SetButton()
#縦向きにウィジェットを配置
vlayout = QVBoxLayout(self)
vlayout.addWidget(self.label)
vlayout.addWidget(self.button)
#ラベルの動作を設定
def SetLabel(self):
self.label = QLabel('おはようございます', self)
self.label.setAlignment(Qt.AlignCenter)
self.label.setStyleSheet("QLabel {font-size: 24px;}")
#ボタンの動作を設定
def SetButton(self):
self.button = QPushButton('文字を変える', self)
self.button.clicked.connect(self.change_text)
#setTextでウィジェットの文字を変更
#processEventsもしくは関数終了時にウィンドウを更新
def change_text(self):
self.button.setText('文字が変わりました')
self.label.setText('おやすみなさい')
QApplication.processEvents()
time.sleep(1)
self.button.setText('文字が戻りました')
self.label.setText('おはようございます')
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec()
記事は以上です。
また何か書きたくなったら適当に書きます。