2

PyQt を使用してページをインポートし、Qt Designer を使用して作成された QStackedWidget に追加しようとしています。コンパイルされたページ コードやコンパイルされた MainWindow コードには触れたくないのです。MainWindow を正常に表示できますが、ページをインポートして QStackedWidget に追加できないようです。

私の MainWindow とページのコンパイル済みコードは次のようになります。

じぶんのmainWindow.py

    from PyQt4 import QtCore, QtGui

    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        _fromUtf8 = lambda s: s

    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName(_fromUtf8("MainWindow"))
    ...

じぶんのappInfoPage.py

    from PyQt4 import QtCore, QtGui

    try:
        _fromUtf8 = QtCore.QString.fromUtf8
    except AttributeError:
        _fromUtf8 = lambda s: s

    class Ui_appInfoPage(object):
        def setupUi(self, appInfoPage):
            appInfoPage.setObjectName(_fromUtf8("appInfoPage"))
    ...

私のmain.py

    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    from mainWindow import Ui_MainWindow
    from appInfoPage import Ui_appInfoPage

    class main(QMainWindow, Ui_MainWindow):
      def __init__(self):
        super(QMainWindow, self).__init__()
        self.setupUi(self)
        self.appInfoPage = Ui_appInfoPage()
        self.appInfoPage.setupUi(self.appInfoPage)
        self.stackedWidget.addWidget(self.appInfoPage)
        self.stackedWidget.setCurrentWidget(self.appInfoPage)

    if __name__ == '__main__':
      application = QApplication(sys.argv)
      window = main()
      window.show()
      sys.exit(application.exec_())

現在のコードではAttributeError: 'Ui_appInfopage' object has no attributes 'setObjectName'エラーが発生し、self.appInfoPage.setupUi(self)代わりに配置すると、ページが MainWindow に重なってしまいます。

どんな助けでも大歓迎です。

4

1 に答える 1

2

2 つのクラスの定義は、Ui_*それらがベースクラスを持つ単純なラッパーであることを示していobjectます。これらは Qt クラスではありません。

代わりにsetupUi()、Qt クラスのインスタンスを最初の引数として渡す必要があるメソッドがあります。

あなたは(すなわち)のインスタンスを継承されたクラスのメソッドにclass main.__init__()正しく渡しています。しかし、正しい Qt クラスのインスタンスを に渡していないため、.QMainWindowselfsetupUiUi_MainWindowself.appInfoPage.setupUiAtrributeError

これを修正する 1 つの方法は、 のサブクラスを作成し、そのUi_appInfoPageインスタンスをスタック ウィジェットに渡すことです。

class AppInfoPage(QWidget, Ui_appInfoPage):
    def __init__(self, parent):
        super(QWidget, self).__init__(parent)
        self.setupUi(self)
...

    self.appInfoPage = AppInfoPage(self)
    self.stackedWidget.addWidget(self.appInfoPage)

NB : サブクラスに使用QWidgetしましたが、実際に別の Qt クラスに基づいてAppInfoPageいる場合は、明らかに変更する必要があります。Ui_appInfoPage

于 2012-08-15T16:10:04.473 に答える