ComboBox在gtk2hs,林间空地

时间:2012-08-16 15:25:49

标签: combobox glade gtk2hs

我使用glade创建了Window,ComboBox,Buttons,代码如下:

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 \ Graphics \ UI \ G中do表达式中的模式匹配失败 TK \ MenuComboToolbar \ ComboBox.chs.pp:244:2-13)

当我从ComboBox中选择一个选项时,是否需要为要执行的操作设置单独的Function?请帮帮我!!

2 个答案:

答案 0 :(得分:0)

如Gtk2Hs文档中所述,comboBoxGetActiveText“在comboBox中返回当前活动的字符串,如果没有选择则返回Nothing。请注意,您只能将此函数与使用comboBoxNewText构造的组合框一起使用。”

如果要使用此功能,请尝试以下选项之一:

  • 不要在Glade文件中设置组合框的TreeModel(可能是ListStore),并在行comboBoxSetModelText comboBox之后添加行comboBox <- xmlGetWidget xml castToComboBox "combobox1"。这可能正常,因为comboBoxNewText“在创建新的组合框后在内部调用comboBoxSetModelText”。
  • 从Glade文件中删除组合框小部件,自行创建(用comboBox <- xmlGetWidget xml castToComboBox "combobox1"替换行comboBox <- comboBoxNewText并将其手动打包到程序的主窗口中。

请注意,TreeModels可以包含任何类型的数据。由于Haskell以与C或Python等命令式语言不同的方式处理数据,因此使用Glade创建的树模型无法导入到Haskell应用程序中:您必须在Haskell程序中定义它们。

答案 1 :(得分:0)

如果您使用comboBoxGetActive函数,它将返回一个Int,然后您可以映射到comboBox中的每个元素。这可以在Graphics.UI.Gtk.MenuComboToolbar.ComboBox API中找到。