Решено: PyGTK: диалоговое окно выхода

Модератор: Модераторы разделов

sbar
Сообщения: 354
ОС: Gentoo

Решено: PyGTK: диалоговое окно выхода

Сообщение sbar »

Доброго времени суток. Мне нужно сделать своему приложению диалог выхода, при подтверждении которого только будет выполнятся gtk.main_quit, а при нажатии "нет" или попытке закрыть диалог - возвращение в главное окно (а диалог должен исчезнуть).
Сам диалог должен вызываться при попытке закрыть главное окно.
Вот код (все проблемы прокомментированы):

Код:

#!/bin/env python # -*- coding: utf-8 -*- import pygtk pygtk.require( '2.0' ) import gtk class GUI: def init_quit_dialog(self): self.quit_dialog = gtk.Dialog( title='Выход...', parent=self.mainwin ) self.quit_dialog.set_position( gtk.WIN_POS_CENTER ) yes_button, no_button, label = gtk.Button( 'Да' ), gtk.Button( 'Нет' ), gtk.Label( 'Уверен?' ) # BTW, как лучше создавать виджеты в диалоговом окне? про add_button я не понял что вставлять вместо response_id self.quit_dialog.action_area.pack_start( yes_button, True, True, 0 ) self.quit_dialog.action_area.pack_start( no_button, True, True, 0 ) self.quit_dialog.vbox.pack_start( label ) self.quit_dialog.set_border_width( 20 ) yes_button.show() no_button.show() label.show() yes_button.connect( 'clicked', gtk.main_quit ) # Выполняется только если я попытаюсь закрыть диалоговое окно. Почему? no_button.connect( 'clicked', lambda w: self.quit_dialog.hide ) # нужно что бы при нажатии этой кнопки диалоговое окно исчезало, а главное оставалось. Этого не происходит #self.quit_dialog.connect( 'delete_event', ээээ ) # собственно надо что б при закрытии диалога происходило тоже самое что и при нажатии no_button def quit_dialog_run(self, widget, event): self.quit_dialog.run() def __init__(self): self.mainwin = gtk.Window( gtk.WINDOW_TOPLEVEL ) self.init_quit_dialog() self.mainwin.connect( 'delete_event', self.quit_dialog_run ) self.mainwin.show() def main(self): gtk.main() GUI().main()

Проблемы:
0. При нажатии "да" нужно еще закрыть сам диалог что бы приложение завершилось.
1. При попытке закрыть диалог почему то закрывается главное окно, а сам диалог остается.
2. Как быть с кнопкой "нет" вообще не понятно. Спрятать диалог? - не работает

P.S.: если не туда тему создал - перенесите плз
P.P.S.: если перенесли - не пинайте сильно, я нуб.
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Re: Решено: PyGTK: диалоговое окно выхода

Сообщение BlackStar »

Примерно так:

Код:

#!/usr/bin/env python import gtk class QuitDialogExample(gtk.Window): def __init__(self, parent=None): gtk.Window.__init__(self) try: self.set_screen(parent.get_screen()) except AttributeError: self.connect('destroy', lambda *w: gtk.main_quit()) self.connect("delete_event", self.delete_event) self.set_title(self.__class__.__name__) self.set_size_request(200, 200) label = gtk.Label("Quit Dialog Example") self.add(label) self.show_all() def delete_event(self, widget, data=None): dialog = gtk.Dialog("Quit Dialog", self, 0, (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)) label = gtk.Label("Want to quit?") dialog.vbox.pack_start(label, True, True, 0) dialog.show_all() response = dialog.run() dialog.destroy() if response == gtk.RESPONSE_OK: return False return True def main(self): gtk.main() if __name__ == '__main__': q = QuitDialogExample() q.main()
LightLang Team
Спасибо сказали:
sbar
Сообщения: 354
ОС: Gentoo

Re: Решено: PyGTK: диалоговое окно выхода

Сообщение sbar »

BlackStar, большое спасибо :)
Спасибо сказали: