Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 15, 2008 12:48:06

sbar
От:
Зарегистрирован: 2007-08-15
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Доброго времени суток. Мне нужно сделать своему приложению диалог выхода, при подтверждении которого только будет выполнятся 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.: Я нуб, не пинайте сильно.



Офлайн

#2 Фев. 15, 2008 16:59:23

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Используй gtk.MessageDialog.



Офлайн

#3 Фев. 15, 2008 17:29:20

sbar
От:
Зарегистрирован: 2007-08-15
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

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

slivlen, спасибо, так получается по-короче.
Переписал init_quit_dialog:

def init_quit_dialog(self):
self.quit_dialog = gtk.MessageDialog( parent=self.mainwin, type=gtk.MESSAGE_QUESTION, buttons=gtk.BUTTONS_YES_NO, message_format='Уверен?' )
self.quit_dialog.set_position( gtk.WIN_POS_CENTER )
self.quit_dialog.set_border_width( 20 )
Теперь при нажатии любой из кнопок или попытки закрыть диалог - исчезает главное окно, а диалог остается.
Как задать действия кнопкам? Из мануала я ничего не нашел про них, а в туториале просто ничего не написано, незаконченная глава.
И в self.quit_dialog.connect( ‘delete_event’, что тут написать? ) что бы при закрытии диалога исчезал именно диалог, а не главное окно?



Отредактировано (Фев. 15, 2008 17:33:11)

Офлайн

#4 Фев. 16, 2008 14:34:35

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Pr0b3L
И в self.quit_dialog.connect( ‘delete_event’, что тут написать? ) что бы при закрытии диалога исчезал именно диалог, а не главное окно?
self.quit_dialog.connect( ‘delete_event’, gtk.main_quit)



Офлайн

#5 Фев. 16, 2008 14:35:22

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Pr0b3L - посмотри glade.



Офлайн

#6 Фев. 16, 2008 16:41:16

sbar
От:
Зарегистрирован: 2007-08-15
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

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

я пока учусь и хочу без glade писать.
а вообще я сейчас начал смотреть в glade: при выборе buttons у MessageDialog оно падает с сегфолтом =/ проверено на версиях 3.4.0 и 3.4.1 (других нету в моем дистре сейчас)
лучше скажите как кнопкам действия задать, пожалуйста.



Офлайн

#7 Фев. 19, 2008 08:43:47

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Pr0b3L
лучше скажите как кнопкам действия задать, пожалуйста.
смотри:
pythonwin
self.quit_dialog.connect( ‘delete_event’, gtk.main_quit)



Офлайн

#8 Фев. 19, 2008 11:43:12

sbar
От:
Зарегистрирован: 2007-08-15
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

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

pythonwin
смотри:
никак не пойму при чем тут закрытие диалогового окна (я про кнопки да/нет хотел узнать), но мне уже подсказали сделать как-то так:
try:
self.set_screen( self.mainwin.get_screen() )
except AttributeError:
self.mainwin.connect( ‘destroy’, lambda *w: gtk.main_quit() )
self.mainwin.connect( ‘delete_event’, self.delete_event )

def delete_event(self, widget, data=None):
quit_dialog = gtk.MessageDialog (
parent = self.mainwin,
type = gtk.MESSAGE_QUESTION,
buttons = gtk.BUTTONS_YES_NO,
message_format = ‘Уверен, что хочешь выйти?’
)

quit_dialog.set_border_width( 20 )
quit_dialog.set_position( gtk.WIN_POS_CENTER )
quit_dialog.set_title( ‘Выход’ )

response = quit_dialog.run()
quit_dialog.destroy()
if response == gtk.RESPONSE_YES:
return False
так что всем спасибо, проблема решена. ;)



Офлайн

#9 Сен. 16, 2008 20:37:06

sbar
От:
Зарегистрирован: 2007-08-15
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

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

А можно ли как-нибудь сделать главное окно “недоступным” пока открыт диалог выхода? Есть такая проблема: пользователь при появлении этого диалога может случайно ткнуть на главное окно и диалог уходит на задний план.



Офлайн

#10 Сен. 16, 2008 22:00:00

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Это то что называется модальным окном?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version