ポップアップメニュー付きのトレイアイコンがあります。このポップアップのメニュー項目の背景色を設定しようとしています。メニュー項目の背景色は設定できますが、テキストの色は設定できません。
表示される背景はデフォルトの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'を使用せずに)
デフォルトのテーマであるUbuntu12.04を使用しています。
Edit1:少しわかりやすくするために、これは私がやろうとしていることですが、「importgtk」はありません。
#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)
Edit2: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))
Edit3:回答が提供されました。この投稿を参照してください。