2014-11-22 4 views
0

Я использую ruby ​​gem gtk2 для отображения простого диалогового окна файла, в котором пользователь может выбрать файл со своего компьютера. Он работает отлично, однако есть одна небольшая проблема.Ruby: диалоговое окно файла не закрывается

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

Мой диалог файл выглядит следующим образом:

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, но это, похоже, не помогло.

ответ

0

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

Для справки см this example

0

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

Смежные вопросы