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クラスにもともと入っているらしい。





この記事へのコメント

name:

mail:

HP:

comment:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/249081620

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。