2015-01-21 47 views
0

我正在尝试用Gtk2Hs和Haskell创建一个程序,我想知道是否有可能让不同的小部件相互通信。Gtk2Hs:小部件交互

我有一个文本输入,它用于编写命令,一个绘图区域,当文本输入被验证时绘制区域。这两个小工具一起工作得很好。

但是,我想在另一个窗口中添加一个“可选”树形视图,当文本条目中的所有命令都已执行完毕(这可能需要很长时间)时才会更新。由于树视图是“可选”并且仅在事后创建,因此我无法在文本条目定义(如绘图区域)中定义对其更新的回调。

我会创建一个信号(事件?),当所有操作完成并被树视图捕获以更新其数据时发出。

我的问题是:

  • 有没有办法做到这一点与Gtk2Hs和油嘴?
  • 是否有可用于制作它的模块(如果可能,可移植到Linux/Windows)?
  • 有没有一种正确的方法来让一个小部件与其他人进行交互/沟通?

我使用GHC 7.4.1和Gtk2Hs 0.12.3

+0

在显示程序的主窗口之后创建的窗口小部件与显示之前创建的窗口部件相比,应该没有什么特别之处。只要新的小部件可用,就添加或修改文本条目的处理程序。 – 2015-01-22 02:21:21

回答

0

我找到一个解决我的问题:

  1. 在主程序中创建的列表的IOREF要执行的操作:

    actionsIO <- newIORef [action_to_do_1,action_to_do_2] 
    
  2. 创建我的自定义组合的微件用于文本输入

    ent <- textEntry window canvas state modele parser info actionsIO 
    

    里面,我执行的这种方式操作的列表:

    actions <- readIORef actionsIO 
    sequence_ actions 
    
  3. 创建我的TreeView

    arwin <- arrayWin modele window canvas state info actionsIO 
    

    里面,我修改/删除/添加动作列表如下:

    let newactions = [new_action_to_do_1,new_action_to_do_2] 
    writeIORef actionsIO newactions 
    

    这些新操作是每次执行一个命令时执行的与特殊的入口小部件。

有可能是一个“更清洁”的方法来做到这一点,但这个工作很好,完全解决了我的问题。