Дополнение на Python с использованием GTK+

Главная Форумы Разработка Разработка сценариев Дополнение на Python с использованием GTK+

В этой теме 1 ответ, 1 участник, последнее обновление  zend 6 года/лет, 3 мес. назад.

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
  • Автор
    Сообщения
  • #849

    zend
    Участник

    Занимаясь написанием очередной версии своего дополнения, столкнулся с проблемой: родительский gtk.Dialog закрывается вместе с дочерним gtk.MessageDialog.

    Суть в следующем, на gtk.Dialog располагаются различные поля ввода и, конечно, кнопки «Отмена» и «Добавить». С помощью этого диалога можно добавить свой формат фото. После нажатия на кнопку «Добавить» происходит проверка, а нет ли уже такого формата? И если такой формат уже существует, то из gtk.Dialog вызывается gtk.MessageDialog с соответствующим предупреждением и кнопкой «Ок». И все бы хорошо, только вот если нажать на «Ок», для того чтобы закрыть окошко с предупреждением и ввести корректные данные, вместе с gtk.MessageDialog закроется и вызвавший его gtk.Dialog.

    gtk.MessageDialog


    def show_error_msg(self, msg):
    errdialog = gtk.MessageDialog(None,
    0,
    gtk.MESSAGE_ERROR,
    gtk.BUTTONS_OK, msg)
    errdialog.set_position(gtk.WIN_POS_CENTER_ALWAYS)
    errdialog.show_all()
    response_err = errdialog.run()
    if response_err == gtk.RESPONSE_OK :
    errdialog.hide()
    errdialog.destroy()
    return

    gtk.Dialog


    dialog = gtk.Dialog("Добавить новый формат",
    None,
    0,
    (gtk.STOCK_CANCEL,
    gtk.RESPONSE_REJECT,
    "Добавить",
    gtk.RESPONSE_OK)
    )

    Вопрос в следующем: как избежать подобной ситуации, как не дать закрыться родительскому gtk.Dialog вместе с дочерним gtk.MessageDialog?

    Заранее спасибо.

    #1445

    zend
    Участник

    Хм… Вот такой код отрабатывает нормально — диалоги закрываются по очереди:


    errdialog = gtk.MessageDialog(None,
    gtk.DIALOG_DESTROY_WITH_PARENT,
    gtk.MESSAGE_INFO,
    gtk.BUTTONS_OK,
    "msg")
    errdialog.set_position(gtk.WIN_POS_CENTER_ALWAYS)
    errdialog.show_all()

    infodialog = gtk.MessageDialog(None,
    gtk.DIALOG_DESTROY_WITH_PARENT,
    gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
    "msg msg msg msg msg msg msg msg")
    infodialog.set_position(gtk.WIN_POS_CENTER_ALWAYS)
    infodialog.show_all()

    response_err = errdialog.run()

    if response_err == gtk.RESPONSE_OK :
    errdialog.hide()
    errdialog.destroy()

    response_info = infodialog.run()

    if response_info == gtk.RESPONSE_OK :
    infodialog.hide()
    infodialog.destroy()
Просмотр 2 сообщений - с 1 по 2 (из 2 всего)

Для ответа в этой теме необходимо авторизоваться.