【问题标题】:Opening and closing a subwindow on pygtk在 pygtk 上打开和关闭子窗口
【发布时间】:2012-08-14 13:56:01
【问题描述】:

我正在尝试使用 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()

和 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

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

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

提前致谢!

【问题讨论】:

    标签: python gtk window pygtk


    【解决方案1】:

    连接到delete-event 信号而不是destroy。无法阻止destroy 信号。

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

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多