使用ondestroy不执行回调函数

时间:2011-09-09 12:01:52

标签: python gtk glade

我正在使用python gtk +和glade开发一个应用程序。我的glade文件格式是gtk-builder。我有两个窗口 - 一个主窗口和一个登录窗口。在__ init __()中我运行登录对话框窗口,这样我就可以确保在用户发出 OK 信号之前,焦点不会切换到主窗口登录窗口。使用以下代码完成此操作后,用户必须在标题栏上的 [x] 上单击两次才能退出应用程序。当我使用loginWindow.show()而不是run()时,它工作得很完美,但焦点问题出现在那里。我该如何解决这个问题?

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()回调。但这没有任何区别。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

看起来你有再入问题。您可能正在登录对话框中的“确定”按钮的onClick上运行主窗口。

也许您多次致电gtk.main()

很难猜测,因为您的代码不完整。