gpt4 book ai didi

haskell - 使用 Haskell 和 Gtk2hs,我将如何创建新的小部件和相关事件?

转载 作者:行者123 更新时间:2023-12-05 01:20:53 25 4
gpt4 key购买 nike

我有一个正在开发的应用程序,我基本上是自学 GUI 编程。我问了一个还算involved question在programmers.stackexchange上。这个问题是关于我没有尝试过的一个想法的机制。

我有三个小部件:TreeView、TextField 和 DrawingArea。这三个小部件中的每一个都与一个上的事件非常密切地交互,必然触发另一个上的 Action 。这三个小部件在很大程度上不与应用程序的其余部分交互,除非(到目前为止)通过读取包含全局应用程序状态的 MVar。

目前我想不出更大的应用程序应该直接与这三个小部件中的任何一个进行交互。此外,将复制相同的模式以查看具有相同形式的其他数据。因此,在我看来,将这三个小部件实际绑定(bind)在一起成为一个更大的复合小部件,可以与 GTK 的正常事件队列交互是有意义的。所以,例如

type MyDataViewWidget = (TreeView, TextField, DrawingArea)
data DataUpdatedSignal a = DataUpdatedSignal a
data RedrawEvent a = RedrawEvent a

因此,小部件将使用 DataUpdatedEvent 向应用程序的其余部分指示 MyDataViewWidget 中的某些内容发生了变化,并且 RedrawEvent 将告诉小部件它需要重绘或重新读取源数据。

(从技术上讲,我没有从语义上考虑过复合小部件中的各种操作会做什么......小部件是否只有应用程序数据的只读副本并且需要使用 RedrawEvent 接收新的只读副本或也许小部件本身具有 MVar 并被允许更改 MVar 中的数据等...我现在只是对如何实际执行此操作感兴趣)

有没有做这样的事情的例子?基本上,我需要实现哪些实例来创建新的小部件和两个信号?我宁愿坚持使用 Haskell,但我可以使用 C 来构建新的小部件。

最佳答案

不幸的是,目前没有纯 Haskell 方法来(正确)实现 Widget类型类。您需要在 C 中实现您的小部件,然后通过 FFI 导入它。有很多这样的例子——基本上所有的 gtk+/gtk2hs 都是数百个这样做的例子的集合。

关于haskell - 使用 Haskell 和 Gtk2hs,我将如何创建新的小部件和相关事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12518149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com