5

初心者なのでよろしくお願いします(;_;)

私は PyQt4 と python 2.6 を使用して作成した GUI を作業ファイル ダイアログと共に作成しました (つまり、ボタンをクリックするとウィンドウがポップアップし、ファイルを選択してロード/保存できます)。GUI のコードは 2000 行ほどあるので、重要だと思われる部分を含めます。

from PyQt4 import QtGui as qt
from PyQt4 import QtCore as qc

class NuclearMotion(qt.QWidget):
    def __init__(self, parent=None):
        super(NuclearMotion, self).__init__(parent)

        file_button = qt.QPushButton("Use data from file")
        mainLayout = qt.QGridLayout()
        mainLayout.addWidget(file_button, 14, 8, 1, 2)

    def choose_file():
        file_name = qt.QFileDialog.getOpenFileName(self, "Open Data File", "", "CSV data files (*.csv)")

        self.connect(file_button, qc.SIGNAL("clicked()"), choose_file)
        self.setLayout(mainLayout)

    if __name__ == '__main__':
        import sys
        app = qt.QApplication(sys.argv)
        NuclearMotionWidget = NuclearMotion()
        NuclearMotionWidget.show()
        sys.exit(app.exec_())

上記は完全に正常に機能します。さまざまなチュートリアルを使用して、すべてのコードを手動で入力しました。QTデザイナーとpyuic4を使用して新しいGUIを作成し、.pyファイルに変換しました。今、ファイルダイアログを機能させることができません。以下のコードは Type エラーになります。

from PyQt4 import QtCore, QtGui

class Ui_mainLayout(object):
    def setupUi(self, mainLayout):
        mainLayout.setObjectName(_fromUtf8("mainLayout"))
        mainLayout.resize(598, 335)
        mainLayout.setTabPosition(QtGui.QTabWidget.North)
        mainLayout.setTabShape(QtGui.QTabWidget.Rounded)
        mainLayout.setElideMode(QtCore.Qt.ElideLeft)

        self.basic_tab = QtGui.QWidget()
        self.file_button = QtGui.QPushButton(self.basic_tab)
        QtCore.QObject.connect(self.file_button, QtCore.SIGNAL("clicked()"), self.choose_file)

    def choose_file(self):
        file_name = QtGui.QFileDialog.getOpenFileName(self, "Open Data File", "", "CSV data files (*.csv)")

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    mainLayout = QtGui.QTabWidget()
    ui = Ui_mainLayout()
    ui.setupUi(mainLayout)
    mainLayout.show()
    sys.exit(app.exec_())

このコードは GUI を正常に生成し、シグナルを含め、他のすべては正常に動作します。私が間違っていることは何ですか?

4

1 に答える 1

2

クラスは、シグナルを処理できるように QtCore.QObject から (直接的または間接的に) 継承する必要があります。最初のものは、ジョブを実行する QWidget から継承します。

于 2011-06-15T18:08:17.600 に答える