如何更改gtk.MenuItem()的背景颜色

0 投票
2 回答
3454 浏览
提问于 2025-04-17 00:22

我在用Gtk制作一个弹出菜单时,想把第一个菜单项设置成一个标题。最好这个标题的背景是白色的。因为---根据文档---我们不能直接改变gtk.Label的背景颜色,而是需要改变它所在容器的背景,所以我觉得应该修改gtk.MenuItem本身。

不过,我尝试了以下方法,但都没有成功:

menu_item.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#FFFFFF'))

这个方法在gtk.EventBox这样的容器上是有效的,但在gtk.MenuItem上就不行。那么上面的代码哪里出了问题,我该怎么做才能让这个gtk.MenuItem的背景变成白色呢?

PS:我不太想使用任何.rc文件来解决这个问题。

2 个回答

0

经过一番折腾,我发现这样可以改变主菜单上的文字:

menu_item.child.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#FFFFFF'))

但是如果你想把整个菜单的背景变成白色,就需要修改父菜单,而不是单独修改菜单项,像这样:

menu = gtk.Menu()
menu_item = gtk.MenuItem("File")
menu_item.set_sumenu(menu)
menu.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(65355,65355,65355))
1

这里有一个示例,当鼠标悬停在“退出”菜单上时,它会变成白色。希望这个能帮到你!

#!/usr/bin/python

import gtk

class PyApp(gtk.Window):

    def __init__(self):
        super(PyApp, self).__init__()

        self.set_title("Simple menu")
        self.set_size_request(250, 200)
        self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(6400, 6400, 6440))
        self.set_position(gtk.WIN_POS_CENTER)

        mb = gtk.MenuBar()

        filemenu = gtk.Menu()
        filem = gtk.MenuItem("File")
        filem.set_submenu(filemenu)

        exit = gtk.MenuItem("Exit")
        style = exit.get_style().copy ()
        style.bg[gtk.STATE_NORMAL] = exit.get_colormap().alloc_color (0xffff, 0x0000, 0x0000)
        exit.set_style (style)

        exit.connect("activate", gtk.main_quit)
        filemenu.append(exit)

        mb.append(filem)

        vbox = gtk.VBox(False, 2)
        vbox.pack_start(mb, False, False, 0)

        self.add(vbox)

        self.connect("destroy", gtk.main_quit)
        self.show_all()

PyApp()
gtk.main()

为了实现这个效果,我调整了“样式”。

撰写回答