使用 GTK 淡出标签/按钮/状态栏

使用 GTK 淡出标签/按钮/状态栏

在 Python/GTK 3 中淡出和淡入元素的最简单方法是什么?

作为一名 Web 开发从业者,我对这个问题的最初想法是调用

c = widget.get_style_context(),, c.remove_class('visible')c.add_class('invisible')

但没有成功(我是否必须调用“重绘”之类的函数?)

我还向 GTK CSS 添加了过渡。

谢谢,

编辑:我可能会指定我想要实现的目标:我有这个“状态栏”,它只是我的应用程序上的一个垂直容器(就像此页面顶部的屏幕截图一样http://uberwriter.wolfvollprecht.de/)。

如果鼠标不动,我想淡出所有这些东西(也是为了保持计算能力 // 不重新计算字数和字符数)并尽量减少“干扰”)。我已经找到了要监听的适当事件(motion-notify-event),所以现在我只需要添加一个简单的淡出并超时。

如果有人能给我指出一个解决方案,无论是解决混乱问题还是解决开罗问题,我都会非常高兴。

答案1

好吧,最棒的是,它可以与 Ubuntu 12.10 和 GTK 3.6 兼容(是那个版本号吗?我不知道)。

所以基本上我所做的是通过 Gtk.StateFlags.INSENSITIVE 将我的状态栏容器设置为 INSENSITIVE。

此属性可通过 CSS 进行样式设置。以下是我的来源

def poll_for_motion(self):
    if (self.was_motion == False
            and self.status_bar_visible 
            and self.buffer_modified_for_status_bar):
        self.status_bar.set_state_flags(Gtk.StateFlags.INSENSITIVE, True)
        self.status_bar_visible = False
        self.buffer_modified_for_status_bar = False
        return False

    self.was_motion = False
    return True

def on_motion_notify(self, widget, data=None):
    self.was_motion = True
    if self.status_bar_visible == False:
        self.status_bar_visible = True
        self.buffer_modified_for_status_bar = False
        self.update_line_and_char_count()
        self.status_bar.set_state_flags(Gtk.StateFlags.NORMAL, True)
        GObject.timeout_add(3000, self.poll_for_motion)

以及与之补充的 CSS:

#status_bar_box GtkLabel:insensitive {
     color: rgba(255,255,255,0);
     transition: 500ms ease-in-out;
}

#status_bar_box GtkButton:insensitive {
    background: rgba(255,255,255,0);
    transition: 500ms ease-in-out;
}

相关内容