我有一个带弹出菜单的托盘图标。我试图设置此弹出菜单中菜单项的背景颜色。我能够设置文本颜色,但无法设置菜单项的背景颜色。
出现的背景是默认的Ubuntu橙色,我无法覆盖它。
我创建了一个演示此问题的样例应用程序。只需将其复制粘贴到.py文件中,它就可以运行。
对于GtkMenuItem,正常背景和:hover背景被忽略了。对于GtkWidget,:hover背景也被忽略了。我的目标是在不禁用菜单项的情况下防止Ubuntu橙色显示出来。
有没有一种方法可以设置GtkMenuItem的背景和悬停/鼠标经过颜色?(不使用'import gtk')
我正在使用Ubuntu 12.04,默认主题。
编辑1:为了更清楚地说明,这就是我想做的事情,但不使用'import gtk'。
出现的背景是默认的Ubuntu橙色,我无法覆盖它。
我创建了一个演示此问题的样例应用程序。只需将其复制粘贴到.py文件中,它就可以运行。
from gi.repository import Gtk, Gdk
import sys
class TrayIcon:
def __init__(self):
self.statusicon = Gtk.StatusIcon()
self.statusicon.set_from_stock(Gtk.STOCK_MEDIA_PLAY)
self.statusicon.connect("popup-menu", self.OnShowPopupMenu)
window = Gtk.Window()
def OnShowPopupMenu(self, icon, button, time):
menu = Gtk.Menu()
first = self.GetMenuItem("First")
second = self.GetMenuItem("Second")
menu.append(first)
menu.append(second)
menu.show_all()
menu.popup(None, None, lambda w,x: self.statusicon.position_menu(menu, self.statusicon), self.statusicon, 3, time)
def GetMenuItem(self, txt):
menuItem = Gtk.MenuItem(txt)
screen = Gdk.Screen.get_default()
css_provider = Gtk.CssProvider()
#css_provider.load_from_data("GtkWidget { color:white; background-color: green; } GtkWidget:hover,GtkWidget:selected { color:white; background-color:pink;}")
css_provider.load_from_data("GtkMenuItem { color:#0f0; background-color: #f00; } GtkMenuItem:hover,GtkMenuItem:selected { color:#00f; background-color:#f00; font-weight:bold;}")
context = Gtk.StyleContext()
context.add_provider_for_screen(screen, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
menuItem.connect("button_press_event", self.exit)
return menuItem
def exit(self, a,b):
sys.exit()
TrayIcon()
Gtk.main()
对于GtkMenuItem,正常背景和:hover背景被忽略了。对于GtkWidget,:hover背景也被忽略了。我的目标是在不禁用菜单项的情况下防止Ubuntu橙色显示出来。
有没有一种方法可以设置GtkMenuItem的背景和悬停/鼠标经过颜色?(不使用'import gtk')
我正在使用Ubuntu 12.04,默认主题。
编辑1:为了更清楚地说明,这就是我想做的事情,但不使用'import gtk'。
#Prevent background color when mouse hovers
style = menuItem.get_style().copy()
style.bg[gtk.STATE_SELECTED] = style.bg[gtk.STATE_NORMAL]
menuItem.set_style(style)
编辑2:我也尝试过override_background_color()和modify_bg,但在悬停时仍然会显示橙色。以下是我尝试过的变体。
menuItem.override_background_color(Gtk.StateFlags.NORMAL,Gdk.RGBA(1.0,0.0,0.0,1))
menuItem.modify_bg(Gtk.StateFlags.NORMAL,Gdk.color_parse("red"))
menuItem.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(1.0, 1.0, 1.0, 1.0))
menuItem.override_background_color(Gtk.StateFlags.SELECTED, Gdk.RGBA(1.0, 1.0, 1.0, 1.0))
menuItem.override_background_color(Gtk.StateFlags.FOCUSED, Gdk.RGBA(1.0, 1.0, 1.0, 1.0))
编辑3: 已提供答案,请参见此帖子。