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

Python 如何更改gtk.MenuItem()的背景色,python,gtk,pygtk,menuitem,Python,Gtk,Pygtk,Menuitem,对于Gtk中的弹出菜单,我希望将第一个菜单项作为标题。最好它的背景应该是白色的。由于------人们不能改变gtk.Label的背景颜色,而是必须改变其容器的背景,因此在我看来,gtk.MenuItem本身应该被修改 然而,我尝试了以下几点,却徒劳无功: menu_item.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#FFFFFF')) 这将适用于作为gtk.EventBox的容器,但对于gtk.MenuItem则不适用。上面有什么不起作

对于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文件。

这里有一个示例,当鼠标悬停在“退出”菜单上时,它将以白色显示。希望它能帮助你

#!/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()

为此,我使用了“样式”。

在弄乱它之后,我发现这可以改变主菜单上的文本:

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))

看来你不能。我在C语言中尝试了这一点,但运气不好:(我没有查看源代码,但我猜MenuItem没有“正常”状态?如果将state参数更改为
state\u SELECTED
,它会更改鼠标上方的背景色。这就是我不喜欢Gtk的原因(感觉事情是这样做的,人们无法设计自己的GUI).Thank+也许你应该将此作为一个答案。@Benjamin,事情是这样做的,所以你不能设计你的GUI。GTK的设计理念是,主题应该留给用户,应用程序应该呈现一致的外观。此外,GTK的一个大卖点是可访问性。如果你将字体变小,并且不加选择地使用颜色,那么最重要的是,你正在锁定视力差或色盲的用户。如果用户想要颜色,他们将安装一个彩色主题,原因也是如此。谢谢:)但是,当我尝试此操作时,前景色(文本)会发生变化,而不是背景。你也是这样吗?从
self.modify\u bg(gtk.STATE\u NORMAL,gtk.gdk.Color(640064006440))
style.bg[gtk.STATE\u NORMAL]=exit.get\u colormap().alloc\u Color(0xffff,0x0000,0x0000)
语句中,我认为背景应该改变,对吗?事实上,背景为我改变,变成白色(并使其上的白色文本无法阅读!)也许可以看看使用的“主题”。可能值得尝试用“主题”来更改此颜色因此,一些可怜的笔记本电脑用户可能仍然能够更改设置以使用它。实际上,在Gtk中更改样式的最简单方法似乎是使用资源文件。我的计算机上的当前主题可能会覆盖本地更改。这也是为什么我如此喜欢Qt而不是Gtk:)你是说65535?