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

2 投票
2 回答
2668 浏览
提问于 2025-04-15 17:15

我是编程新手,正在学习用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 个回答

3

@mg 我错了。你的代码是对的(我想我最开始的代码也是对的)。 我的对话框一直显示在屏幕上的原因是因为我的 gtk.main 循环在一个单独的线程中运行。

所以我只需要把你的代码(我修正过的版本)放在一个

gtk.gdk.threads_enter()

和一个

gtk.gdk.threads_leave()

之间,就解决了问题。 谢谢你的回复。

2

能给我最后一次机会吗?;)

你的代码里有一些错误:

  • 你没有关闭一个括号

  • 你在 .set_property 的写法不对:应该用 .set_property('属性', '值')

不过我觉得这些可能是复制粘贴的时候出错了。

试试这个代码,对我来说是可以的。你是不是忘了加 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()

撰写回答