2011-09-09 78 views
0

我正在開發一個使用python gtk +和glade的應用程序。我的glade文件格式是gtk-builder。我有兩個窗口 - 一個主窗口和一個登錄窗口。裏面__init __()我運行登錄對話框窗口,這樣我可以確保焦點不會切換到主窗口,直到用戶從登錄窗口發出OK信號。當使用以下代碼完成此操作時,用戶必須在標題欄上的[x]上單擊兩次以退出應用程序。當我使用loginWindow.show()而不是run()時,它可以很好地工作,但焦點問題出現在那裏。我該如何解決這個問題?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()主窗口。兩個窗口同時彈出,但登錄窗口在登錄前只有焦點。代碼已完成,我是否也應該發佈glade文件? 謝謝 –