打开和关闭pygtk上的子窗口

Alb*_*o A 2 python gtk pygtk window

我正在尝试使用pygtk创建一个打开子窗口的应用程序,但是我在创建/显示以及此窗口的销毁/隐藏过程时遇到了一些麻烦.作为测试,我做了一个简单的应用程序,打开一个带有单个按钮的主窗口,单击该按钮时会打开一个带有三个按钮的子窗口.我用glade来设计界面.我的代码如下:

main.py

import gobject
import pygtk
import gtk.gtkgl
import gtk.glade
from interface import *

if __name__ == "__main__":
    gtk.gdk.threads_init()
    settings = gtk.settings_get_default()
    settings.props.gtk_button_images = True
    intf = interface()
    gtk.main()
Run Code Online (Sandbox Code Playgroud)

和interface.py

import pygtk
import gtk.gtkgl
import gtk.glade

class interface(object):

    def __init__(self):

        self.builder = gtk.Builder()
        self.builder.add_from_file("web-interface.glade")

        self.main_window = self.builder.get_object("main_window")
        self.camera_window = self.builder.get_object("cam_window")
        self.main_window.show()

        self.builder.connect_signals(self)

    def on_main_window_destroy(self, widget):
        gtk.main_quit()

    def on_camera_clicked(self, widget):
        self.camera_window.show()

    def on_bt1_clicked(self, widget):
        self.camera_window.hide()

    def on_cam_window_destroy(self, widget):
        self.camera_window.hide()
        return
Run Code Online (Sandbox Code Playgroud)

其中'bt1'是camera_window上的一个按钮来隐藏它,'camera'是主窗口上打开子窗口的按钮.

现在,当我尝试用'camera'打开子窗口并用'bt1'关闭它时,它工作得很好.但是如果我尝试用"X"按钮关闭子窗口,下次打开它时会得到一个灰色的空窗口,即使我将destroy事件更改为仅隐藏窗口.我究竟做错了什么?

提前致谢!

pto*_*ato 8

连接到delete-event信号而不是destroy.该destroy信号不能被阻止.

另外,请确保您return Truedelete-event处理程序.这意味着您已处理该事件,并将阻止进一步处理.如果不这样做,那么默认处理程序仍将在您的之后调用,因此窗口将被隐藏,然后仍然会被销毁.