2011-09-09 53 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文件? 谢谢 –