как правильно уничтожать объекты gtk.Dialog / виджеты - PullRequest
2 голосов
/ 21 декабря 2009

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 ]

3 голосов
/ 22 декабря 2009

@ мг Виноват. Ваш код правильный (и я думаю, мой начальный код тоже был) Причина, по которой мое диалоговое окно осталось на экране, заключается в том, что мой цикл gtk.main выполняется в отдельном потоке.

Так что все, что мне нужно было, это заключить твой код (исправленную версию) между

gtk.gdk.threads_enter()

и

gtk.gdk.threads_leave()

и там это было. Спасибо за ваш ответ.

2 голосов
/ 21 декабря 2009

Можете ли вы дать мне последний шанс? ;)

в вашем коде есть ошибки:

  • вы не закрыли скобку

  • Ваш синтаксис в .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()
...