devlog

http://twitter.com/yusukei

PySide + QUiLoaderを使ったテスト その2

UIファイルをロードしてSignalとSlotを設定してみます。
基本は前回と同じ。UIファイルは前回と同じものを使っています。
ボタンを押すと標準出力にpushed!と表示されます。


test02.py

from PySide import QtCore, QtGui
from PySide.QtUiTools import QUiLoader

class MyQUiLoader(QUiLoader):
    def __init__(self, baseinstance):
        QUiLoader.__init__(self)
        self.baseinstance = baseinstance

    def createWidget(self, className, parent=None, name=""):
        widget = QUiLoader.createWidget(self, className, parent, name)
        if parent is None:
            return widget
        else:
            setattr(parent, name, widget)
            return widget

def loadUi(uifile, baseinstance=None):
    loader = MyQUiLoader(baseinstance)
    ui = loader.load(uifile)
    QtCore.QMetaObject.connectSlotsByName(ui)
    return ui
        
class TestDialog(object):
    def __init__(self):
        self.ui = loadUi('test.ui')
        
        self.ui.formLayoutWidget.pushButton.clicked.connect(self.onPushButton)
        self.ui.show()
        
    def onPushButton(self):
        print 'pushed!'
        
    def loadUi(uifile, baseinstance=None):
        loader = MyQUiLoader(baseinstance)
        ui = loader.load(uifile)
        QtCore.QMetaObject.connectSlotsByName(ui)
        return ui

    
if __name__ == '__main__':
    
    import sys
    app = None
    if QtGui.QApplication.instance() is None:
        app = QtGui.QApplication(sys.argv)
    else:
        app = QtGui.QApplication.instance()
    
    w = TestDialog()

    app.exec_()