1

我使用 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 tk\MenuComboToolbar\ComboBox.chs.pp 的 do 表达式中的模式匹配失败: 244:2-13)

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

4

2 回答 2

0

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

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

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

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

于 2012-12-09T23:13:38.963 回答
0

如果您使用该comboBoxGetActive函数,它将返回一个 Int ,然后您可以对comboBox. 这可以在Graphics.UI.Gtk.MenuComboToolbar.ComboBoxAPI 中找到。

于 2013-02-20T11:47:11.263 回答