2011-12-16 11 views
0

これで、gtk.mainを呼び出すときにプログラムが無限ループに入るはずです。 self.quitが呼び出されると、gtk.mainのループが壊れます。gtk/pythonプログラムで余分な無限ループを作成する方法は?

しかし、私は変更をログファイルでチェックし、gtk.Textbufferに表示されるgtk.Textbufferに変更を更新し続ける別のループをアクティブにする必要があります。では、次のコードでこのループをどこに追加できますか?

class MessageBox: 

    def __init__(self): 
     builder = gtk.Builder() 
     builder.add_from_file("mbx.glade") 
     self.window = builder.get_object("window") 
     dic = { "on_buttonSend_clicked" : self.sendmsg, 
       "on_entry_activate" : self.sendmsg, 
       "on_buttonWhois_clicked" : self.sendwhois, 
       "on_buttonIdleTime_clicked" : self.sendidletime, 
       "on_window_destroy" : self.exitfunc} 
     builder.connect_signals(dic) 
     self.entry = builder.get_object("entry") 
     self.display = builder.get_object("display") 
     self.displaybuff=self.display.get_buffer() 

    def exitfunc(self, widget): 


    def sendmsg(self, widget): 


    def sendwhois (self, widget): 


    def sendidletime (self, widget): 


if __name__ == "__main__": 

    msgbox = MessageBox() 
    msgbox.window.show() 
    gtk.main() 
+0

@soulcheck:その編集のおかげで、私はそれについてどうやって行くのだろうかと思っていました。 – NitinAb

+0

SOは、すべてのコードに4つのスペースインデントを必要とし、一般に4つのスペースインデントを必要とします。それは私をたくさん苛立たせるが、それはどうあるべきかを考えてみよう。 – soulcheck

+0

buzz_lightyear.py –

答えて

5

のみつまり、gtk.mainが新しいレベルに入るとgtk.main_quitがそのレベルから存在し、同時にgtkの一方メインループが存在します。

通常は、ワーカーが新しい情報を取得したときに並行して動作し、ウィジェットを更新する作成ワーカースレッドです。しかし、あなたが記述問題によると、私は次のようにあなただけのgioと変更用のファイルを監視する必要があると考えている:

monitor = gio.File(filename).monitor() 
monitor.connect('changed', file_changed_cb) 

ファイルは、信号が放出されるとfile_changed_cbコールバックメソッドが実行される変更するたびに。そこでは、監視されているファイルからの新しい情報と一致するようにウィジェットを更新することができます。ただし、コールバックメソッドの完了に時間がかかり過ぎると、アプリケーションが応答しなくなる可能性があるため、スレッド戦略を実行する必要があります。

関連する問題