1

デザイナーを使用してLinuxでアプリをセットアップしようとしPyQt4ていますが、信号とスロットをアプリに接続するのに苦労しています。今、私がやりたいのは、ボタンclicked信号をカスタムスロットに接続することだけです。saveEnergySchemeこれは、単に「エネルギーリスト」を端末に出力します。

アプリの.uiコードを。を使用してPythonクラスに変換しましたpyuic4 -w sumcorr.ui > sumcorr_ui.pysumcorr_ui.pyこれにより、モジュール内に次のクラスが作成されましたSumCorr_ui

class SumCorr_ui(QtGui.QMainWindow, Ui_SumCorr_ui):
    def __init__(self, parent=None, f=QtCore.Qt.WindowFlags()):
        QtGui.QMainWindow.__init__(self, parent, f)

        self.setupUi(self)

次に、アプリをカスタムウィジェットとして作成し、ボタンに単純なシグナルスロット接続を追加して、機能することを示しました。

from PyQt4 import QtGui, QtCore
from sumcorr_ui import SumCorr_ui

class SumCorr(SumCorr_ui):

    def __init__(self):
        SumCorr_ui.__init__(self)
        self.save_energies_button.clicked.connect(self.saveEnergyScheme)

    def saveEnergyScheme(self):
        print 'energyList'

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    mySumCorr = QtGui.QMainWindow()
    ui = SumCorr()
    ui.setupUi(mySumCorr)
    mySumCorr.show()
    sys.exit(app.exec_())

、という名前のボタンをクリックすると、「エネルギーリスト」という行が表示されると思いますsave_energies_buttonが、何も起こりません。これは、UIをウィジェットとしてではなく、メインウィンドウとして作成したためでしょうか。なぜ印刷されないのですか?

4

1 に答える 1

2

追加ui.show()してみると、コードが 2 つの異なるウィンドウを作成していることがわかります。一方には信号が接続されているはずで、もう一方には接続されていません。これは、ウィンドウのみを表示しているためですが、mySumCorrウィンドウのみを呼び出しsetupUiているため、信号が接続されていません。

インスタンスを作成するときSumCorrは、ウィンドウを作成してセットアップします。その後、理由もなく、信号を接続せずにインスタンスui.setupUi(mySumCorr)をセットアップし、この最後のウィンドウを表示します。mySumCorr

あなたのコードは次のようになるはずです:

class SumCorr(QtGui.QMainWindow, Ui_SumCorr_ui):

    def __init__(self):
        SumCorr_ui.__init__(self)
        self.setupUi(self)

        self.save_energies_button.clicked.connect(self.saveEnergyScheme)

    def saveEnergyScheme(self):
        print 'energyList'

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    mySumCorr = SumCorr()
    mySumCorr.show()
    sys.exit(app.exec_())

SumCorr_uiクラスを持っても意味がないことに注意してください。これQt 、UI ライブラリであるため、価値のないレベルの抽象化を導入しているだけだからです。デザイナー ファイルは、UI レイアウトの抽象化を既に提供しています。

于 2013-02-22T12:44:35.577 に答える