我试图用Gtk2Hs和Haskell创建一个程序,我想知道是否有可能让不同的小部件相互通信。
我有一个文本条目,用于编写命令,一个绘图区域,在验证文本条目时绘制一些内容。这两个小部件很好地协同工作。
但是,我想添加一个"可选"另一个窗口中的树视图,当文本条目中的所有命令都已执行时将更新(这可能需要很长时间)。
由于树视图是"可选"并且仅在之后创建,我无法在文本条目定义中定义其更新的回调(如绘图区域)。
我会创建一个信号(事件?),当所有操作完成并被树视图捕获以更新其数据时发出。
我的问题是:
我使用GHC 7.4.1和Gtk2Hs 0.12.3
答案 0 :(得分:0)
我找到了解决问题的方法:
在主程序中,我创建了一个要执行的操作列表的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
每次使用特殊条目小部件验证命令时,都会执行这些新操作。
可能有一个&#34;清洁剂&#34;这样做的方法,但这个工作得很好,完全解决了我的问题。