如何创建滑动小部件(GTK+,快速)

Áng*_*aya 10 gui widgets quickly application-development gtk3

最近我在 Gedit 中看到了这个小部件:

在此处输入图片说明

当您按下 时它会出现Ctrl + F。我感兴趣的是如何获得滑动效果。任何建议将不胜感激。

wol*_*lfv 8

我使用GTK 和 CSS实现了淡出效果。

它仅适用于 GTK 3.6,我不确定是否可以实现滑入/滑出效果,但是,如果您愿意,可以查看 launchpad.net/uberwriter 上的源代码

它通过状态更改和 GTK 转换工作......也许高度 // 宽度也是可能的。

编辑

因为人们显然不赞成我,这里是另一个更详细的解释:

这是我使用的 CSS:

GtkLabel:insensitive {
    color: rgba(255,255,255,0);
    transition: 500ms ease-in-out;
}
Run Code Online (Sandbox Code Playgroud)

如果你使用它作为 CSS(我希望我被允许参考我自己的解释,如何做到这一点:http : //wolfvollprecht.de/blog/gtk-python-and-css-are-an-awesome-combo/)然后您可以使用Gtk.StateFlags淡出标签。

例如:

label.set_state_flags(Gtk.StateFlags.INSENSITIVE, True)

然后你会过渡到零不透明度。

但是,正如我所注意到的,用 CSS 影响位置/宽度的选项并不多,所以我想它仅限于颜色/不透明度等。

享受。

PS:请注意,这适用于 Gtk 3.6,因为 Ubuntu 12.10


Raf*_*lak 3

这样的动画在纯 GTK+ 中是无法实现的。没有任何机制可以处理它。

我快速浏览了 gedit 的源代码,很明显他们自己处理这个动画。我没有研究细节,因为与动画相关的代码相当扩展,但我注意到它们为动画搜索小部件合并了开罗绘图功能。最有可能的是,该小部件通过逐帧移动其位置并在单个文本显示区域使用的覆盖层中的不同位置重绘它来进行动画处理。

这似乎是最简单的解决方案。(gedit 的代码似乎是为共享相同代码库的许多动画准备的,因此在简单的应用程序中使用它的精确方法可能是一种矫枉过正。)

要重现此效果,您需要:

  • 对要滑入/滑出的 UI 部分使用自定义小部件。
  • 使其对绘制事件和定期超时做出反应(重绘动画的每一帧)
  • 在其余小部件(或必须显示为位于滑动小部件下方的任何区域)上创建透明覆盖层
  • 在此类叠加层上手动绘制动画小部件。

我想不出任何更简单的解决方案。然而,考虑到 gedit 开发人员对 GTK+ 的了解可能很少,因此可能没有更简单的技巧来实现这种效果。