我使用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?请帮帮我!!
答案 0 :(得分:0)
如Gtk2Hs文档中所述,comboBoxGetActiveText“在comboBox中返回当前活动的字符串,如果没有选择则返回Nothing。请注意,您只能将此函数与使用comboBoxNewText构造的组合框一起使用。”
如果要使用此功能,请尝试以下选项之一:
comboBoxSetModelText comboBox
之后添加行comboBox <- xmlGetWidget xml castToComboBox "combobox1"
。这可能正常,因为comboBoxNewText“在创建新的组合框后在内部调用comboBoxSetModelText”。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中找到。