Haskell Gtk2Hs:小部件交互
我正在尝试用Gtk2Hs和Haskell创建一个程序,我想知道是否有可能使不同的小部件相互通信 我有一个用于编写命令的文本条目,一个绘图区域,在验证文本条目时绘制一些东西。这两个小部件一起工作很好 但是,我想在另一个窗口中添加一个可选的treeview,当文本条目中的所有命令都已执行时,它将被更新。这可能需要很长时间 由于treeview是可选的,并且只是在之后创建的,因此我不能像绘图区域那样在文本条目定义中定义对其更新的回调 我想创建一个信号事件?在所有操作完成并被treeview捕获以更新其数据时发出 我的问题是: 有没有办法用Gtk2Hs和Glib做到这一点? 如果可能的话,是否有一个模块可用于使其可移植到Linux/Windows? 是否有正确的方法使小部件与他人交互/通信?Haskell Gtk2Hs:小部件交互,haskell,gtk2hs,Haskell,Gtk2hs,我正在尝试用Gtk2Hs和Haskell创建一个程序,我想知道是否有可能使不同的小部件相互通信 我有一个用于编写命令的文本条目,一个绘图区域,在验证文本条目时绘制一些东西。这两个小部件一起工作很好 但是,我想在另一个窗口中添加一个可选的treeview,当文本条目中的所有命令都已执行时,它将被更新。这可能需要很长时间 由于treeview是可选的,并且只是在之后创建的,因此我不能像绘图区域那样在文本条目定义中定义对其更新的回调 我想创建一个信号事件?在所有操作完成并被treeview捕获以更新其
我正在使用GHC 7.4.1和Gtk2Hs 0.12.3我找到了问题的解决方案: 在主程序中,我创建要执行的操作列表的IORef:
actionsIO <- newIORef [action_to_do_1,action_to_do_2]
每次使用特殊条目小部件验证命令时,都会执行这些新操作
可能有一种更简洁的方法可以做到这一点,但这一方法很好地解决了我的问题。在显示程序主窗口后创建的小部件与显示前创建的小部件相比应该没有什么特别之处。一旦新的小部件可用,只需添加或修改文本条目的处理程序。
ent <- textEntry window canvas state modele parser info actionsIO
actions <- readIORef actionsIO
sequence_ actions
arwin <- arrayWin modele window canvas state info actionsIO
let newactions = [new_action_to_do_1,new_action_to_do_2]
writeIORef actionsIO newactions