2012-03-20 7 views
0

私はこれで一日中私の髪を引っ張ってきました。私は忍耐を欠いています。pygtk statusBarはシグナルハンドラから更新されません

基本的に私はgladeから構築されたpygtkプログラムを持っています。メインウィンドウの一番下にはステータスバーがあり、使用状況のエラーや接続されているハードウェアに関するステータスメッセージが表示され、以下の機能が使用されます。したがって、displayErrorの呼び出しはすべて、ユーザーの操作に基づいてオブジェクト内から実行され、すべて動作するように見えます。テストでは、私はdisplayCurrentへの呼び出しを試みました。この問題は、ハードウェアプロセスがdisplayCurrentを使用しようとしたときに発生します。システムが動作する方法は、メインウィンドウクラスのメンバの1人がハードウェアへのインターフェイスオブジェクトです。これには、データを出力するメッセージであるデータを取得するたびにシグナルを送信する、マルチプロセッシングプロセスを使用する別個のプロセスがあります。誰にもアイデアはありますか?私は必要に応じてもっと深く何かを説明することができます。すべての詳細を得るためにポストするコードはたくさんあります。

def displayCurrent(self, message): 
    print message 
    if self.lastMess: 
     self.statusBar.remove(self.normalID, self.lastMess) 
    self.lastMess = self.statusBar.push(self.normalID, message) 

def displayError(self, message, timeout = 5): 
    """ 
    Function that takes an error message and raises it to the user via the statusbar 
    timeout seconds later. 
    """ 
    print message 
    mess = self.statusBar.push(self.urgentID, message) 
    # clear statusbar 
    gobject.timeout_add_seconds(timeout, self.clearStatus, self.urgentID, mess) 

def clearStatus(self, cID, mID): 
    #time.sleep(timeout) 
    self.statusBar.remove(cID, mID) 
    #print self.statusBar.remove_all(self.urgentID) 
    print 'popped' 
    return False 

答えて

0

コード全体を投稿してください。

一般的に、別の処理を行っている場合は、この機能は動作しません。 GTK(と他のすべて)がフォークされています。プロセス間通信のいくつかの形式を使用する必要があります。マルチプロセッシングモジュールがそれを処理します。また、GTKで行うことができるハックもあります(例えば、Vimのようなウィンドウタイトルやプラグアンドソケットを使って通信するなど)。これらに誘惑されないでください。

関連する問題