2014-11-22 59 views
0

我使用紅寶石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秒鐘睡眠之前?

我試圖在返回file_name之前使用dialog.destroyask_for_file但這似乎沒有幫助。

回答

0

我通過創建一個帶有按鈕的新窗口打開文件對話框來解決它。點擊打開的按鈕後,我也會發送一個信號來銷燬主窗口。這樣,我選擇一個文件後立即關閉。

更多信息參見this example

0

您需要手動調用像GtkFileChooserDialog GTK + -provided對話框gtk_widget_destroy();點擊其中一個按鈕是不夠的。請注意,這也破壞了對話框中的文件選擇器部分,所以在你做之前一定要獲取你的文件名和任何有價值的東西。