Ruby: диалоговое окно файла не закрывается

Я использую рубиновый камень gtk2 для отображения простого диалогового окна файла, где пользователь может выбрать файл со своего компьютера. Это работает просто отлично, однако есть одна маленькая проблема.

Диалоговое окно файла не закрывается после выбора файла, но остается открытым, пока весь сценарий не будет завершен.

Мой диалог с файлами выглядит так:

def ask_for_file(question)
    dialog =  Gtk::FileChooserDialog.new(question, nil,
                         Gtk::FileChooser::ACTION_OPEN,
                         "gnome-vfs",
                         [Gtk::Stock::OPEN, Gtk::Dialog::RESPONSE_ACCEPT],
                         [Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL]
                         )
    if dialog.run == Gtk::Dialog::RESPONSE_ACCEPT
        file_name = dialog.filename.to_s
        return file_name
    else
        return nil
    end
end

Когда я называю это в моем сценарии так:

path = ask_for_file("Test?")
sleep(5)
puts "continue with #{path}"

Диалоговое окно файла остается открытым в течение 5 секунд и не отвечает в это время. Как я могу заставить его закрыться после выбора файла, но до 5-секундного сна?

Я пытался использовать dialog.destroy в ask_for_file как раз перед возвращением file_name но это не помогло.

2 ответа

Я решил это, создав новое окно с кнопкой для открытия диалогового окна файла. После нажатия на кнопку открытия я также посылаю сигнал на уничтожение главного окна. Таким образом, все закрывается сразу после того, как я выбрал файл.

Для справки смотрите этот пример

Вам нужно вручную позвонить gtk_widget_destroy() в GTK+-обеспечиваемых диалоговых окнах, таких как GtkFileChooserDialog; нажатия на одну из кнопок будет недостаточно. Обратите внимание, что это также уничтожает часть диалога выбора файлов, поэтому убедитесь, что вы получили свое имя файла и все остальное, что имеет значение, прежде чем вы это сделаете.

Другие вопросы по тегам