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


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

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

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

Оффлайн Xyanight

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

Код: (python) [Выделить]
import gtk


# Константы кнопок.
YES = gtk.BUTTONS_OK
YES_NO = gtk.BUTTONS_YES_NO
YES_CANCEL = gtk.BUTTONS_OK_CANCEL
CLOSE = gtk.BUTTONS_CLOSE

# Константы окон.
INFO = gtk.MESSAGE_INFO
QUERY = gtk.MESSAGE_QUESTION
WARNING = gtk.MESSAGE_WARNING
ERROR = gtk.MESSAGE_ERROR


class PyGtkDialog(gtk.Window):

    def __init__(self):
        super(PyGtkDialog, self).__init__()


    def __show(self, widget, title, text, buttons, par):
        window = gtk.MessageDialog(self, gtk.DIALOG_MODAL, par, buttons, text)
        window.set_title(title)
        response = window.run()
        result = None

        if response == gtk.RESPONSE_YES or response == gtk.RESPONSE_OK:
            result = "yes"
        elif response == gtk.RESPONSE_CANCEL:
            result = "cancel"
        elif response == gtk.RESPONSE_CLOSE:
            result = "close"
        elif response == gtk.RESPONSE_NO:
            result = "no"

        window.destroy()
        return result


    def show(self, title="Title", text="Text", buttons=CLOSE, par=INFO):
        result = self.__show(self, title, text, buttons, par)
        gtk.main()
        return result


if __name__ == "__main__":
    gtk_dialog = PyGtkDialog()
    result = gtk_dialog.show("Заголовок", "Текст", YES_CANCEL, WARNING)
    print result
« Последнее редактирование: 09 Марта 2015, 14:58:21 от Xyanight »
Это просто какой-то Python!

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • 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

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

Оффлайн Xyanight

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

 

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