pygtk hide / destroy不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pygtk hide / destroy不起作用相关的知识,希望对你有一定的参考价值。

我正在尝试打开一个Dialog,在收到回复之后再次关闭它。据我所知,.destroy()或.hide()应该从屏幕上删除窗口。但窗户冻结并保持打开状态。我究竟做错了什么?

这是我的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import gtk
import time

class MyWindow(gtk.Dialog):

    def __init__(self, parent=None, filename="Filename.jpg"):
        gtk.Dialog.__init__(self, "Window", parent, 0,
            (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
             gtk.STOCK_OK, gtk.RESPONSE_OK))

        self.set_default_size(150, 100)
        box = self.get_content_area()

        self.usr_label = gtk.Label("User-Name:	")
        self.usr_entry = gtk.Entry()
        box.add(self.usr_label)
        box.add(self.usr_entry)

        self.show_all()


dialog = MyWindow(filename="foobar")
response = dialog.run()
if response != gtk.RESPONSE_OK:
       exit()
dialog.hide()
dialog.destroy()
time.sleep(15)
print("foo")
答案

试试这个:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import gtk, time;

class MyWindow(gtk.Dialog):
    def __init__(self, parent=None, filename="Filename.jpg"):
        gtk.Dialog.__init__(self, "Window", parent, 0,
            (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
                gtk.STOCK_OK, gtk.RESPONSE_OK));

        self.connect("destroy", self.quit);
        self.connect("response", self.response);

        self.set_default_size(150, 100)
        box = self.get_content_area()

        self.usr_label = gtk.Label("User-Name:	")
        self.usr_entry = gtk.Entry()
        box.add(self.usr_label)
        box.add(self.usr_entry)

        self.show_all();

    def response(self, widget = None, data = None):
        if data == gtk.RESPONSE_OK:
            name = self.usr_entry.get_text();
            print("User-Name: " + name);
            self.quit();
        else:
            self.quit()

    def main(self): gtk.main();
    def quit(self, widget = None): gtk.main_quit();

if __name__ == '__main__': MyWindow().main();

以上是关于pygtk hide / destroy不起作用的主要内容,如果未能解决你的问题,请参考以下文章

基本控制器中的 Destroy() 不起作用

使用dependent: :destroy 在rails 上不起作用

在函数内部创建图表时,销毁 chart.js 不起作用 - chart.destroy() 不是函数

为啥 Bootstrap data-dismiss 和 modal('hide') 不起作用?

hide() 在 IE 中不起作用

在子组件的 beforeDestroy/Destroyed 循环中更改道具的值不起作用