![使用 GTK 淡出标签/按钮/状态栏](https://linux22.com/image/1078418/%E4%BD%BF%E7%94%A8%20GTK%20%E6%B7%A1%E5%87%BA%E6%A0%87%E7%AD%BE%2F%E6%8C%89%E9%92%AE%2F%E7%8A%B6%E6%80%81%E6%A0%8F.png)
在 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;
}