23

最近、Python と PySide を使用して最初のアプリを作成することにしました。しかし、私には問題があり、皆さんが助けてくれることを願っています.

Python は、「内部 C++ オブジェクト」が削除されたという例外を発生させ続けます。Python での私の限られた経験から、オブジェクトが範囲外になり、Python のガベージ コレクターによって削除されていることが分かります。

では、PySide を使用して Python で複数ページのアプリケーションを設計するにはどうすればよいでしょうか。また、QWidgets を保持できるので、ページを再度表示できます。

御時間ありがとうございます。

更新 (コード)

instancing = None
def instance():
   global instancing
   if instancing == None:
      instancing = WPZKernel()
   return instancing

class WPZKernel:
    win = None
    mainscreen = None

    def mainwindow(self):
        if self.win == None:
          self.win = GMKMainWindow(self)
        return self.win

    def main_panel(self):
        if self.mainscreen == None:
           self.mainscreen = GMKMainScreen(self.mainwindow())
        return self.mainscreen

次に、通常は次のように呼び出してメインパネルにアクセスします。

import kernel
kernel.instance().main_panel()

それで、私はこれについて間違った方法をとっていますか?

4

2 に答える 2

19

いくつかの検索と髪の引っ張りの後、解決策を見つけました。すべてのページを中央ウィジェットとして設定して表示していましたが、 QMainWindow のドキュメントを読んでいると、次のようにウィジェットが基本的に qt によって削除されることがわかりました。

注: QMainWindow はウィジェット ポインターの所有権を取得し、適切なタイミングで削除します。

したがって、マルチページ アプリケーションを開発するには、むしろQStackedWidgetを見てください。

于 2011-03-19T18:12:44.127 に答える
15

ここを参照してください: PySide の落とし穴

QObject が Python の範囲外になると、削除されます。オブジェクトへの参照を保持するように注意する必要があります。

  • 保持しているオブジェクトの属性として保存します。たとえば、self.window = QMainWindow()
  • 親 QObject をオブジェクトのコンストラクターに渡し、親が所有するようにします
于 2011-03-17T12:51:31.953 に答える