2011-09-09 14 views
0

私はpython gtk +とgladeを使ってアプリケーションを開発しています。私のgladeファイル形式はgtk-builderです。メインウィンドウとログインウィンドウの2つのウィンドウがあります。 __ init __()I を実行してログインダイアログウィンドウを開き、ユーザがOKシグナルをログインウィンドウから送信するまで、フォーカスがメインウィンドウに切り替わらないようにすることができます。これが次のコードを使用して実行されると、ユーザーはタイトルバーの[x]を2回クリックしてアプリケーションを終了する必要があります。 run()ではなくloginWindow.show()を使用すると、完璧に動作しますが、フォーカスの問題が発生します。この問題を解決するにはどうすればよいですか?ondestroyでコールバック関数が実行されない

import sys 
try: 
    import pygtk 
    pygtk.require("2.8") 
except: 
    pass 
try: 
    import gtk 
except: 
    sys.exit(1) 


class netChat: 
    def __init__(self): 
     self.builder = gtk.Builder() 
     self.builder.add_from_file("netchat.glade") 
     self.builder.connect_signals(self) 
     self.loginWindow = self.builder.get_object('loginWindow') 
     self.mainWindow = self.builder.get_object('mainWindow') 
     self.message = self.builder.get_object('message') 
     self.timeLine = self.builder.get_object('timeLine') 
     self.loginWindow.run() 
    def onSend(self, widget): 
     text = self.message.get_text() 
     myBuffer = self.timeLine.get_buffer() 
     myBuffer.insert_at_cursor(' '+text+'\n') 
     self.message.set_text('') 
     print "on Send" 
    def mainQuit(self, widget): 
     print "Quiting, goodbye!" 
     sys.exit(0) 
    def loginQuit(self, widget): 
     print "Login Quit, goodbye!" 
     sys.exit(1) 

if __name__ == "__main__": 
    myChat = netChat() 
    gtk.main() 

両方のウィンドウで同じmainQuit()コールバックを設定しようとしました。しかし、それは何の違いもありませんでした。助けてくれてありがとう。

答えて

0

再入荷の問題があるようです。おそらく、ログインダイアログの「ok」ボタンのonClickからメインウィンドウを実行しています。

おそらくgtk.main()を何回か呼び出すのですか?

あなたのコードは完全ではないので、推測するのは難しいです。

+0

いいえログイン「OK」のonClick()からメインウィンドウを実行していませんでした。両方のウィンドウが同時にポップアップしますが、ログインウィンドウはログインする前にフォーカスが当たっています。コードが完成しました。グレイドファイルも投稿する必要がありますか? ありがとう –

関連する問題