【问题标题】:ComboBox in gtk2hs, gladegtk2hs 中的组合框,林间空地
【发布时间】:2012-08-16 15:25:48
【问题描述】:

我已经使用 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 才能执行操作?请帮帮我!!

【问题讨论】:

    标签: combobox glade gtk2hs


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多