2012年01月29日

独自のシグナルのタイミングを作成する

正直、わざわざ独自のシグナルを生成しなくてもほとんどの場合何となくなるんではないかと勝手に思っているので内容は半分スルー

import sys
from PyQt4 import QtGui, QtCore
class Communicate(QtCore.QObject):
    closeApp = QtCore.pyqtSignal()

class Emit(QtGui.QMainWindow):
    def __init__(self):
        super(Emit, self).__init__()
        self.setMyself()

    def setMyself(self):
        self.c = Communicate()
        self.c.closeApp.connect(self.close)

        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle('Emit signal')
        self.show()

    def mousePressEvent(self, event):
        self.c.closeApp.emit()

def main():
    app = QtGui.QApplication(sys.argv)
    ex = Emit()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
定型で覚えてしまう
class Communicate(QtCore.QObject):
    closeApp = QtCore.pyqtSignal()
このクラスを用意する。 QtCore.QObjectを継承し、closeAppはQtCore.pyqtSignalのオブジェクトとして生成する。
self.c = Communicate()
メインとなるクラスでオブジェクトをcとして生成し、
self.c.closeApp.emit()
pyqtSignal()のemitという関数でシグナルを発する。
self.c.closeApp.connect(self.close)
self.c.closeApp.connectがシグナルとなり、それを受けてself.closeが行われる。
シグナルを使わない方法
def mousePressEvent(self, event):
    self.c.closeApp.emit()
この部分を
def mousePressEvent(self, event):
    self.close()
としてしまえば、シグナルなんかを使わなくても同じように動作する。 mousePressEventはマウスがクリックされた時に実行される関数で、QMainWindowクラスにもともと入っているらしい。

タグ:pyQT Python

posted by まつき はじめ at 00:25 | Comment(0) | TrackBack(0) | すべて