Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Python. GTK. Почему после закрытия скрипт висит в процессах?  (Прочитано 499 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Xyanight

  • Автор темы
  • Забанен
  • Участник
  • *
  • Сообщений: 147
  • Это просто какой-то Python!
    • Просмотр профиля
Только начал изучать PyGTK. Сразу, дабы в будущем облегчить себе жизнь, я пишу свои классы и функции по изученным материалам. Такой вопрос: после закрытия скрипт висит в процессах. Как это исправить? Сразу скажу, что данный класс планируется использовать для программы, у которой нет интерфейса (она висит в трее), а необходимость, посредством информационных окон, доносить результаты работы к пользователю остается. Поправьте, пожалуйста, если я где-то допустил ошибку.

Код: Python
  1. import gtk
  2.  
  3.  
  4. # Константы кнопок.
  5. YES = gtk.BUTTONS_OK
  6. YES_NO = gtk.BUTTONS_YES_NO
  7. YES_CANCEL = gtk.BUTTONS_OK_CANCEL
  8. CLOSE = gtk.BUTTONS_CLOSE
  9.  
  10. # Константы окон.
  11. INFO = gtk.MESSAGE_INFO
  12. QUERY = gtk.MESSAGE_QUESTION
  13. WARNING = gtk.MESSAGE_WARNING
  14. ERROR = gtk.MESSAGE_ERROR
  15.  
  16.  
  17. class PyGtkDialog(gtk.Window):
  18.  
  19.     def __init__(self):
  20.         super(PyGtkDialog, self).__init__()
  21.  
  22.  
  23.     def __show(self, widget, title, text, buttons, par):
  24.         window = gtk.MessageDialog(self, gtk.DIALOG_MODAL, par, buttons, text)
  25.         window.set_title(title)
  26.         response = window.run()
  27.         result = None
  28.  
  29.         if response == gtk.RESPONSE_YES or response == gtk.RESPONSE_OK:
  30.             result = "yes"
  31.         elif response == gtk.RESPONSE_CANCEL:
  32.             result = "cancel"
  33.         elif response == gtk.RESPONSE_CLOSE:
  34.             result = "close"
  35.         elif response == gtk.RESPONSE_NO:
  36.             result = "no"
  37.  
  38.         window.destroy()
  39.         return result
  40.  
  41.  
  42.     def show(self, title="Title", text="Text", buttons=CLOSE, par=INFO):
  43.         result = self.__show(self, title, text, buttons, par)
  44.         gtk.main()
  45.         return result
  46.  
  47.  
  48. if __name__ == "__main__":
  49.     gtk_dialog = PyGtkDialog()
  50.     result = gtk_dialog.show("Заголовок", "Текст", YES_CANCEL, WARNING)
  51.     print result
  52.  
« Последнее редактирование: 09 Март 2015, 14:58:21 от Xyanight »
Это просто какой-то Python!

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Xyanight, где сказано что скрипт закрывается? Вставь туда exit()
ЗЫ Подсветка синтаксиса изобретена[co​de=python]
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Xyanight

  • Автор темы
  • Забанен
  • Участник
  • *
  • Сообщений: 147
  • Это просто какой-то Python!
    • Просмотр профиля
Xyanight, где сказано что скрипт закрывается? Вставь туда exit()
Это так и должно быть в PyGTK? sys.exit(1)? Потому что с gtk.main_quit() скрипт тоже становится висяком. В Tkinter, к примеру, не нужно указывать на exit() достаточно уничтожить окно destroy или quit.
« Последнее редактирование: 09 Март 2015, 15:04:55 от Xyanight »
Это просто какой-то Python!

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
В vala это делается через метод Gtk.main_quit. В питоне должно быть что-то похожее.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Xyanight

  • Автор темы
  • Забанен
  • Участник
  • *
  • Сообщений: 147
  • Это просто какой-то Python!
    • Просмотр профиля
Достаточно было закоментировать  gtk.main().
Это просто какой-то Python!

 

Страница сгенерирована за 0.094 секунд. Запросов: 24.