2015-01-21 49 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 
    

    這些新操作是每次執行一個命令時執行的與特殊的入口小部件。

有可能是一個「更清潔」的方法來做到這一點,但這個工作很好,完全解決了我的問題。