ある種の数学データを研究するための 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
直接参照する方法です。書いてみたlogbuffer
turing
TURING
enditer = turing.logbuffer.get_end_iter()
turing.logbuffer.insert(enditer, 'Please update the database.')
しかし、それは機能していません。私は解決策を見つけるために一生懸命努力しましたが、成功しませんでした。
この問題は非常に些細なことであり、Python と OOP に関してまだ深刻な概念上の問題があることはわかっていますが、どんな助けも心から感謝します。(私はバローズのメインフレームで Fortran プログラムのカード パンチングを始めたので、コミュニティの慈悲を頼りにすることができました...)