【问题标题】:pygtk hide/destroy doesn't workpygtk 隐藏/销毁不起作用
【发布时间】:2013-11-14 23:25:15
【问题描述】:

我正在尝试打开一个对话框,并在收到回复后再次关闭它。 据我了解, .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:\t")
        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")

【问题讨论】:

  • 你有gtk.main()吗?
  • @Cilyan 不——我需要它吗?在哪里?
  • 我没有发布答案,因为我 100% 确定,但我相信你仍然需要一个主循环。请参阅此处的示例:zetcode.com/gui/pygtk/dialogs
  • 您的代码适用于我(Py 2.7 win32 Gtk 2.24.2),类似的代码适用于 Py 3.3 win32 Gtk 3.6.4 (GI)。但是,您可能还想在单击“取消”时隐藏和销毁对话框(之后检查响应),但主循环不是问题。

标签: python window pygtk


【解决方案1】:

试试这个:

#!/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:\t")
        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();

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2019-01-26
    • 2021-11-25
    • 2011-06-08
    相关资源
    最近更新 更多