如何在Haskells gi-gtk库中处理listBox的点击

时间:2017-12-19 03:04:29

标签: haskell gtk3

我正在尝试使用Gtk和Haskell。而我卡住了。此链接显示了我的实验。 https://github.com/bigos/my-haskell-gtk-3-tutorial/blob/master/5-layout-containers.org#edit-the-source-2

我正在尝试打印单击列表框行的索引。以下代码给出了一个我不理解的类型错误。

 onListBoxRowSelected listbox2 (\row -> putStrLn (listBoxRowGetIndex row))

我需要一个示例,我可以看到有人可以正确处理listBox行上的点击事件。

错误消息

  

找不到必需的祖先'GI.Gtk.Objects.ListBoxRow.ListBoxRow'   键入'Maybe GI.Gtk.Objects.ListBoxRow.ListBoxRow'。 •在第一个   'putStrLn'的参数,即'(listBoxRowGetIndex row)'中   表达式:putStrLn(listBoxRowGetIndex row)在第二个参数中   'onListBoxRowSelected',即

1 个答案:

答案 0 :(得分:1)

回调参数类型为Maybe GI.Gtk.Objects.ListBoxRow.ListBoxRow。如果没有选择任何内容,它可以是NothinglistBoxRowGetIndex的参数具有多态类型,因此它会尝试查找Maybe GI.Gtk.Objects.ListBoxRow.ListBoxRow的实例,但是没有这样的实例。最小的工作代码是

onListBoxRowSelected listbox2 (\(Just row) -> listBoxRowGetIndex row >>= print)

但是,考虑应用程序逻辑,最好正确处理Nothing案例。