LINUX.ORG.RU

Не закрывается окно перед циклом (pygtk)


0

1

Пишу редактор карт для игрушки на pygtk и pygame, для загрузки файлов использую pygtk и gtk.FileSelection. Проблема в том что после вызова dialog.hide() и gtk.main_quit() окно dialog=gtk.FileSelection не закрывается, тоесть оно дожидается пока закончится цикл загрузки карты и только потом закрывается. Подскажите как можно проверить статус завершения pygtk?

Проблемное место (линия 170 файла editor121.py):

def open_map(w):

	global dialog,edit_mode;
	
	filename=dialog.get_filename();	

	dialog.hide()
	
	gtk.main_quit();

#дальше идет цикл загрузки карты

Исходники: Исходник редактора и движка

добавь после hide()

if gtk.event_pending():
    gtk.main_iteration()
ananas ★★★★★ ()
Ответ на: комментарий от ananas
def open_map(w):

	global dialog,edit_mode;
	
	filename=dialog.get_filename();	

	dialog.hide();
	
	if gtk.event_pending(): 
		gtk.main_iteration() 

	
	gtk.main_quit();

Ответ:

  File "editor121.py", line 171, in open_map
    if gtk.event_pending(): 
AttributeError: 'module' object has no attribute 'event_pending'

Переделал как gtk.events_pending()

def open_map(w):

	global dialog,edit_mode;
	
	filename=dialog.get_filename();	

	dialog.hide();
	
	if gtk.events_pending(): 
		gtk.main_iteration() 
	
	gtk.main_quit();

Но окно попрежнему не закрывается пока цикл не закончится.

orkshaman ()

Если я правильно понял документацию то при dialog.run() запускается свой независимый от gtk.main() цикл событий. Соответственно для завершения диалога надо использовать dialog.destroy().

fat_angel ★★★★★ ()
Ответ на: комментарий от fat_angel

Сделал так:

def open_map(w):

	global dialog,edit_mode;
	
	filename=dialog.get_filename();	

	dialog.destroy();
	
	gtk.main_quit();

И окно снова выжидает конца цикла и закрывается.

Если сделать например так:

def open_map(w):

	global dialog,edit_mode;
	
	filename=dialog.get_filename();	

	dialog.destroy();
	
	gtk.main_quit();

	nothing=raw_input('>');

То окно закрывается как положено, потом надо нажать enter в консоли и стартует цикл загрузки карты. В чем же проблема?

orkshaman ()
Ответ на: комментарий от orkshaman

Ты бы для начала показал как ты вообще создаешь диалог.

Я всегда делал как то так

def on_openbutton_clicked(self, widget):
    dialog =  gtk.FileChooserDialog("Select folder",
      self.parent_win, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
      (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
      gtk.STOCK_OPEN, gtk.RESPONSE_OK))
    dialog.set_default_response(gtk.RESPONSE_OK)
    response = dialog.run()
    dirname = dialog.get_filename()
    dialog.destroy()
    if response == gtk.RESPONSE_OK:
        print "Do what you want to do"
    else:
        print "Fuck off"
и у меня диалог закрывался вовремя.

fat_angel ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.