2012-08-16 86 views
1

我已經創建的窗口,組合框,利用林間空地和代碼按鈕如下:組合框在gtk2hs,林間空地

module Main where 
import Graphics.UI.Gtk 
import Graphics.UI.Gtk.Glade 

main = do 
    initGUI 
    Just xml <- xmlNew "Tp.glade" 
    window <- xmlGetWidget xml castToWindow "window1" 
    button <- xmlGetWidget xml castToButton "button1" 

    comboBox <- xmlGetWidget xml castToComboBox "combobox1" 

    onClicked button $ do 
     putStrLn $ "Apply button selected " 
     selected <- comboBoxGetActiveText comboBox 

     print selected 

    onDestroy window mainQuit 
    widgetShowAll window 
    mainGUI 

如果我從ComboBox中選擇一個選項,並單擊動作按鈕,它顯示了以下錯誤消息 UI.exe:用戶錯誤(在模式匹配失敗做在GTK \圖形\ UI表達\ G變 TK \ MenuComboToolbar \ ComboBox.chs.pp:244:2-13)

我需要將行爲分開的函數爲p當我從ComboBox中選擇一個選項時是否有錯誤?請幫幫我!!

回答

0

如Gtk2Hs文檔中所述,comboBoxGetActiveText「返回comboBox中當前活動的字符串,或者如果沒有選擇任何內容,則返回Nothing。請注意,只能在使用comboBoxNewText構造的組合框中使用此函數。

如果要使用此功能,請嘗試以下選項之一:

  • 沒有設置在格萊德文件組合框(可能是一個ListStore)的TreeModel中和後添加行comboBoxSetModelText comboBoxcomboBox <- xmlGetWidget xml castToComboBox "combobox1"。這可能是正確的,因爲comboBoxNewText「在創建新的組合框後內部調用comboBoxSetModelText」。
  • 從格萊德文件中刪除組合框控件,創建它自己(與comboBox <- comboBoxNewText更換線comboBox <- xmlGetWidget xml castToComboBox "combobox1"和手動打包到你的程序的主窗口。

注意TreeModels可以容納任何類型的數據。由於Haskell以與C或Python等命令式語言不同的方式處理數據,所以使用Glade創建的樹模型無法導入到Haskell應用程序中:您必須在Haskell程序中定義它們

0

如果使用comboBoxGetActive函數,它將返回一個Int,然後您可以映射到中的每個元素210。這可在Graphics.UI.Gtk.MenuComboToolbar.ComboBox API中找到。