0

ある種の数学データを研究するための Python GTK アプリケーションを作成しています。__INIT__メイン スクリプトには、ループを開始するための main(self) とループを終了させるための delete_event の3 つのメソッドしかない 1 つのクラスがあります。

__INIT__分析関数 (別の functions.py モジュールで定義) がその結果を共通のログ/メッセージ領域に出力できるように、TextBuffer ウィジェットと TextView ウィジェットを含む GUI を作成します。関連する抜粋は次のとおりです。

include module functions(.py)

(...)

class TURING:

  def __init__(self):

    self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

    (...)

    self.logscroll = gtk.ScrolledWindow()
    self.logscroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)

    self.logbuffer = gtk.TextBuffer()

    self.logpage = gtk.TextView(self.logbuffer)
    self.logpage.set_editable(gtk.FALSE)
    self.logpage.set_cursor_visible(gtk.FALSE)
    self.logpage.set_wrap_mode(gtk.WRAP_CHAR)
    self.logscroll.add(self.logpage)
    self.logscroll.show()
    self.logpage.show()

    (...)

    enditer = self.logbuffer.get_end_iter()
    self.logbuffer.insert(enditer, 'Welcome!')

    (...)

  def main(self):
    gtk.main()

if __name__ == "__main__":
  turing = TURING()
  turing.main()

中間の 2 行は、self.logpage で定義されたメッセージ領域にウェルカム メッセージを正常に出力します。

現在、メソッド関数の関数の 1 つは、データベースが最新かどうかをチェックし、そうでない場合は、生データの新しいバッチをロードするようにユーザーに要求します。

これを行う 1 つの方法は、次のように、その機能をトリガーするメニュー項目を含めることです。

item_dataCheck.connect("アクティブ化", functions.data_check, '')

functions.data_check正常に動作しますが、その出力を self.logbuffer に書き込もうとすると、メニュー項目item_dataCheckにプロパティがないというエラーがスローされますlogbuffer。問題のコードは

 enditer = self.logbuffer.get_end_iter()
 self.logbuffer.insert(enditer, 'Please update the database.')

明らかに、self という名前は、関数を呼び出したウィジェットを表していますitem_dataCheck。私の質問は、クラスのインスタンスのメンバーとしてfunctions.data_check直接参照する方法です。書いてみたlogbufferturingTURING

 enditer = turing.logbuffer.get_end_iter()
 turing.logbuffer.insert(enditer, 'Please update the database.')

しかし、それは機能していません。私は解決策を見つけるために一生懸命努力しましたが、成功しませんでした。

この問題は非常に些細なことであり、Python と OOP に関してまだ深刻な概念上の問題があることはわかっていますが、どんな助けも心から感謝します。(私はバローズのメインフレームで Fortran プログラムのカード パンチングを始めたので、コミュニティの慈悲を頼りにすることができました...)

4

1 に答える 1