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; нажатия на одну из кнопок будет недостаточно. Обратите внимание, что это также уничтожает часть диалога выбора файлов, поэтому убедитесь, что вы получили свое имя файла и все остальное, что имеет значение, прежде чем вы это сделаете.