如何在gtk.Table中突出显示一行?

2 投票
1 回答
1111 浏览
提问于 2025-04-15 13:26

我想在一个gtk.Table中突出显示特定的行。我还希望当鼠标悬停在这些行上时,能够用不同的颜色来高亮显示,就像在网页浏览器中链接的效果一样。我考虑过给每个单元格加一个事件框,然后改变STATE_NORMALSTATE_PRELIGHT的背景颜色,这样是可以的,但鼠标悬停在事件框上时却没有效果。有没有更好的方法呢?

1 个回答

2

这个看起来可以用:

    def attach(w,c1,c2,r1,r2):
        eb = gtk.EventBox()
        a = gtk.Alignment(xalign=0.0,yalign=0.5)
        a.add(w)
        eb.add(a)
        eb.set_style(self.rowStyle)
        def ene(eb,ev):
            eb.set_state(gtk.STATE_PRELIGHT)
        def lne(eb,ev):
            eb.set_state(gtk.STATE_NORMAL)
        eb.connect('enter-notify-event', ene)
        eb.connect('leave-notify-event', lne)

        self.table.attach(eb, c1, c2, r1, r2,
                          xoptions=gtk.EXPAND|gtk.FILL,
                          yoptions=gtk.SHRINK)

它一次只高亮一个单元格,所以我得改一下通知事件,让所有单元格都亮起来。

补充说明:self.rowStyle 是这样设置的:

tmpeb = gtk.EventBox()
st = tmpeb.get_style().copy()
st.bg[gtk.STATE_PRELIGHT] = gtk.gdk.Color(65535,65535,0)
self.rowStyle = st

我创建了一个 EventBox 只是为了获取它的样式。

撰写回答