如何正确销毁gtk.Dialog对象/小部件

时间:2009-12-21 20:05:28

标签: python pygtk dialog

Noob @使用python和pygtk进行编程。

我正在创建一个包含几个用户交互对话框的应用程序。

#!usr/bin/env python
import gtk
info = gtk.MessageDialog(type=gtk.DIALOG_INFO, buttons=gtk.BUTTONS_OK)
info.set_property('title', 'Test info message')
info.set_property('text', 'Message to be displayed in the messagebox goes here')
if info.run() == gtk.RESPONSE_OK:
    info.destroy()

这会显示我的消息对话框,但是,当您单击对话框中显示的“确定”按钮时,没有任何反应,该框只是冻结。 我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

@mg 我的错。你的代码是正确的(我猜我的初始代码也是如此) 我的对话框保留在屏幕上的原因是因为我的gtk.main循环在一个单独的线程上运行。

所以我只需将你的代码(我的更正版本)放在

之间
gtk.gdk.threads_enter()

gtk.gdk.threads_leave()

就在那里。 谢谢你的回复。

答案 1 :(得分:2)

你能给我最后的机会吗? ;)

您的代码中存在一些错误:

  • 您没有关闭括号

  • .set_property中的语法错误:使用:.set_property('property', 'value')

但我认为它们是复制/粘贴错误。

试试这段代码,它对我有用。也许你忘记了gtk.main()

import gtk

info = gtk.MessageDialog(buttons=gtk.BUTTONS_OK)
info.set_property('title', 'Test info message')
info.set_property('text', 'Message to be displayed in the messagebox goes here')
response = info.run()
if response == gtk.RESPONSE_OK:
    print 'ok'
else:
    print response
info.destroy()

gtk.main()