标签: gtk2hs

Gtk终端小工具

简单的问题:GTK是否有Linux风格的终端小部件?对于Haskell也是如此,因为我想使用gtk2hs

gtk terminal haskell widget gtk2hs

6
推荐指数
1
解决办法
964
查看次数

gtkhs中Widget类的自定义实现

Gtk2hs具有各种实现Widget类的小部件数据类型.是否可以编写自定义数据类型?

假设我想拥有用于显示和运行Lua代码的小部件.

data LuaWidget = LuaWidget { text :: TextView, package :: HBox } deriving Eq
instance Widget LuaWidget where
    ....
Run Code Online (Sandbox Code Playgroud)

是否可以在Haskell级别上?

gtk haskell gtk2hs

6
推荐指数
1
解决办法
368
查看次数

即使应用程序似乎正在运行,gtk窗口也会停止更新

我维护一个gtk3(虽然是gtk2hs和gi-gtk的混合)应用程序,它作为一个独立的状态栏,用于平铺窗口管理器,称为taffybar.

Taffybar有一个长期存在的错误,其中发生的事情导致其中一个窗口(它可以有多个窗口,例如在多个监视器上显示时)以完全停止更新(此处发布).我已经通过各种日志记录机制验证了应该更新窗口IS的代码实际上继续运行.此外,如果taffybar显示在多个窗口上,窗口将一次受到影响 - 也就是说,挂起似乎只影响它发生的窗口,这排除了UI线程上发生的任何奇怪事情或类似的东西.

不幸的是,我没有一致的方法来重现这个问题.更糟糕的是,我甚至无法想出一种以编程方式检测问题的方法.有了这个说,发现问题相对容易,因为最近添加了新的图标加载机制已经变得更糟(在最新版本中似乎每5分钟发生一次).这提醒我,我应该提到的另一件事是我相对肯定这个问题与pixbufs和图像显示有关,因为我从未见过当工作区图像模块不活动时会出现问题.

我讨厌问一个问题,甚至不能提供一致的方法来重现这个问题,但我只是不知道如何处理/调试这个问题.实际上,我很难想象我所描述的行为是如何实现的.我希望关于这个问题的特殊性质的某些东西可能对于一些比我更了解的人来说已经足够了,可能会对这个问题做出一些猜测.

为了使我的问题尽可能明确,我会将其说成如下:

什么可能导致gtk应用程序窗口挂起(停止更新)而不会崩溃应用程序或UI线程,或影响应用程序创建的任何其他窗口?

编辑:这个错误的另一个有趣的怪癖是,即使窗口停止更新,它仍然响应鼠标输入.

编辑2:另一件值得注意的事情是偶尔,我收到了这样的信息:

gtkicontheme.c:3956:proxy_pixbuf_destroy: assertion failed: (icon_info->proxy_pixbuf != NULL)
Run Code Online (Sandbox Code Playgroud)

当我尝试在代码中销毁挂起的窗口时,我也收到以下消息:

Source ID 363524 was not found when attempting to remove it
Run Code Online (Sandbox Code Playgroud)

我有时会从图标主题加载图标

gtk haskell gtk2hs gdkpixbuf

6
推荐指数
1
解决办法
127
查看次数

安装gtk2hs

我已经安装了gtk2hs-buildtools没有问题,但是当我尝试使用'cabal install gtk'安装gtk时,这是输出:

[gautam@gautam ~]$ cabal install gtk
Resolving dependencies...
[1 of 2] Compiling SetupWrapper     ( /tmp/cairo-0.12.213784/cairo-0.12.2/SetupWrapper.hs, /tmp/cairo-0.12.213784/cairo-0.12.2/dist/setup/SetupWrapper.o )
[2 of 2] Compiling Main             ( /tmp/cairo-0.12.213784/cairo-0.12.2/Setup.hs, /tmp/cairo-0.12.213784/cairo-0.12.2/dist/setup/Main.o )
Linking /tmp/cairo-0.12.213784/cairo-0.12.2/dist/setup/setup ...
[1 of 2] Compiling Gtk2HsSetup      ( Gtk2HsSetup.hs, dist/setup-wrapper/Gtk2HsSetup.o )
[2 of 2] Compiling Main             ( SetupMain.hs, dist/setup-wrapper/Main.o )
Linking dist/setup-wrapper/setup ...
Cannot find gtk2hsC2hs
Please install `gtk2hs-buildtools` first and check that the install directory is in your PATH (e.g. HOME/.cabal/bin).
[1 of 2] Compiling SetupWrapper     ( /tmp/glib-0.12.213784/glib-0.12.2/SetupWrapper.hs, /tmp/glib-0.12.213784/glib-0.12.2/dist/setup/SetupWrapper.o ) …

gtk install haskell gtk2hs

5
推荐指数
1
解决办法
2349
查看次数

带空地的单选按钮分组

我正在使用带有 gtk2hs 绑定的编辑器 Glade 在 Haskell 中编写 GUI。目前,我在对单选按钮进行分组方面惨败。它不会让我选择组名。有人可以帮忙吗?

glade gtk2hs

5
推荐指数
1
解决办法
2283
查看次数

构建Haskell(gtk2hs)GUI

我正在尝试使用Gtk2Hs构建中型GUI,但我并不确定构建系统的最佳方法是什么.我正在寻找一种独立开发子组件的方法,一般来说最终会得到一种结构,这种结构不会让我以后拉出我的头发.

主要的困难是由API等基于组件的组件引起的(即我需要使用相机包裹块withVideoMode :: Camera Undefined -> (Camera a -> IO ()) -> IO ()).我也希望将它们分开,但我没有找到合理的方法来做到这一点.

我需要添加的大多数组件都需要初始化,例如设置摄像机参数或构建小部件,捕获由其他组件触发的事件以及最后清除硬件等清理.

到目前为止,我已经考虑过使用ContTcps部件和像snaplet这样的组件,并将它们隐藏在某个State地方.首先看起来非常重量级,第二个看起来很讨厌,因为我无法在gtk2hs回调中优雅地使用变换器.

(由于某些原因,gists今天不适合我,所以为在这里张贴整个巨大的代码而道歉)

{-#LANGUAGE ScopedTypeVariables#-}
{-#LANGUAGE DataKinds #-}

import CV.CVSU
import CV.CVSU.Rectangle
import CV.Image as CV
import CV.Transforms
import CV.ImageOp 
import CV.Drawing as CV
import CVSU.PixelImage
import CVSU.TemporalForest
import Control.Applicative
import Control.Applicative
import Control.Concurrent
import Control.Monad
import Data.Array.MArray
import Data.IORef
import Data.Maybe
import Data.Word
import Utils.Rectangle
import Foreign.Ptr
import Graphics.UI.Gtk …
Run Code Online (Sandbox Code Playgroud)

architecture user-interface haskell gtk2hs

5
推荐指数
1
解决办法
335
查看次数

覆盖Haskell中的事件

我正在用GUI编写haskell程序.当我写下面的代码

    onClicked btn $ do
           print 1

    onClicked btn $ do
           print 2
Run Code Online (Sandbox Code Playgroud)

按btn导致同时打印1和2如何覆盖函数定义,使最后一个定义替换第一个定义并仅打印2

背景:我正在写一个扫雷游戏.当一个按钮有一个它爆炸时,然后我再次尝试再次播放并定义相同的按钮以清除地雷,但由于第一个定义,按下它会再次爆炸.

谢谢

user-interface haskell gtk2hs

4
推荐指数
1
解决办法
189
查看次数

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

我有一个我正在研究的应用程序,我基本上是自学GUI编程.我在programmers.stackexchange上提出了一个相当复杂的问题.这个问题是关于我没有尝试过的想法的机制.

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

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

type MyDataViewWidget = (TreeView, TextField, DrawingArea)
data DataUpdatedSignal a = DataUpdatedSignal a
data RedrawEvent a = RedrawEvent a
Run Code Online (Sandbox Code Playgroud)

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

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

做这样的事情有什么例子吗?基本上,我需要实现哪些实例来创建新的小部件和两个信号?我更喜欢坚持使用Haskell,但我可以使用C语言来构建新的小部件.

haskell gtk2hs

4
推荐指数
1
解决办法
221
查看次数

如何修复构建gtk2hs软件包时出现的"外部声明中不可接受的结果类型:CULong"错误?

当尝试使用ghc-7.6.1编译gtk Haskell包时,我收到以下错误(当尝试构建pango时,其中一个依赖项,但如果我尝试手动安装它们,它也会出现在其他依赖包中):

[ 1 of 14] Compiling Graphics.Rendering.Pango.Types ( dist/build/Graphics/Rendering/Pango/Types.hs, dist/build/Graphics/Rendering/Pango/Types.o )

Graphics/Rendering/Pango/Types.chs:249:1:
    Unacceptable result type in foreign declaration: CULong
    When checking declaration:
      foreign import ccall unsafe "static pango_context_get_type" pango_context_get_type
        :: CULong
Run Code Online (Sandbox Code Playgroud)

我以前安装了旧版本的gtk2hs,因此在升级期间会发生这种情况.

我该如何修复错误?

haskell gtk2hs

4
推荐指数
1
解决办法
319
查看次数

gtksourceview2:实现完成提供程序

文件约状态SourceCompletionProvider:

You must implement this interface to provide proposals to SourceCompletion
Run Code Online (Sandbox Code Playgroud)

"实现此接口"在上下文中意味着什么?

我应该GObject使用这个功能创建新的吗?有什么例子吗?

当我有新的时候GObject,我该如何添加功能(如sourceCompletionProviderGetName)呢?

谢谢

haskell gtk2hs gtksourceview

3
推荐指数
1
解决办法
230
查看次数