Hello World / plɹoM ollǝH

Programmers Live in Vain

Signalの使いかたをよく忘れるのでメモ

これでGUIピタゴラ装置作ったら仕事してる振りできる

f:id:dungeonneko:20160204225915g:plain

# conding: utf-8
import sys
from PySide.QtCore import *
from PySide.QtGui import *

# ほげ~
class Hoge(QLabel):
    # 文字列を引数に渡すシグナルを定義
    textChanged = Signal(str)

    # 初期化
    def __init__(self, parent=None):
        super().__init__(parent)

    # setTextが呼ばれたらラベルを書き換えて一秒後にシグナルを発信
    def setText(self, text):
        super().setText(text)
        QTimer.singleShot(1000, lambda : self.textChanged.emit(text))

# entry point
if __name__ == '__main__':
    myapp = QApplication(sys.argv)

    widget = QWidget()
    layout = QVBoxLayout(widget)
    lineed = QLineEdit()
    label0 = Hoge()
    label1 = Hoge()
    label2 = Hoge()
    label3 = Hoge()
    label4 = Hoge()

    widget.setLayout(layout)
    layout.addWidget(lineed)
    layout.addWidget(label0)
    layout.addWidget(label1)
    layout.addWidget(label2)
    layout.addWidget(label3)
    layout.addWidget(label4)

    lineed.textChanged.connect(lambda s : label0.setText(s))
    label0.textChanged.connect(lambda s : label1.setText(s))
    label1.textChanged.connect(lambda s : label2.setText(s))
    label2.textChanged.connect(lambda s : label3.setText(s))
    label3.textChanged.connect(lambda s : label4.setText(s))

    widget.show()
    sys.exit(myapp.exec_())