我目前的GTK弹出窗口看起来像这样 - 请注意它采用黑暗的氛围颜色主题。
在GTK3.8及更高版本中有GTKMenuButtons - 弹出窗口看起来像这样 - 请注意它看起来像使用按钮样式提示。
我喜欢这种风格,我希望我的应用程序弹出窗口看起来一样,所以有更好的外观 - 整合和感觉。
我知道我可以使用这段python代码覆盖弹出窗口的背景颜色:
style = button.get_style_context() color = style.get_background_color(Gtk.StateFlags.NORMAL) popup_menu.override_background_color(Gtk.StateFlags.NORMAL, color)
如果我应用按钮背景颜色,它看起来像这样。
我不知道如何将按钮字体颜色应用于弹出窗口。
更重要的是,有一个恼人的黑色边框 - 1px宽?
因此,对于我的问题 - 我是否尝试了正确的方法(覆盖主题属性)或者我可以以某种方式将一个小部件的CSS样式(按钮或按钮弹出窗口)应用于弹出窗口,以便我可以模仿menubutton popup样式?
更多信息 - GTKMenuButton源gtkmenubutton.c没有弹出窗口的任何主题控件,因此我不知道menubutton popup如何获得它的主题。
答案 0 :(得分:1)
经过进一步调查后,我发现窗口小部件(或容器)的样式类会影响嵌入对象的整体样式。
让我用一个例子进一步解释:
构建网格并附加包含弹出菜单的MenuButton。
将工具栏StyleClass添加到网格会影响该网格中的所有对象,包括弹出窗口。
style = grid.get_style_context()
style.add_class(Gtk.STYLE_CLASS_TOOLBAR)
结果如下:
from gi.repository import Gtk class MenuExampleWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Menu Example") self.set_default_size(200, 200) grid = Gtk.Grid() grid.insert_column(0) menu = Gtk.Menu() mitem1 = Gtk.MenuItem(label = "Item 1") mitem2 = Gtk.MenuItem(label = "Item 2") menub = Gtk.MenuButton(label='menu') menub.set_popup(menu) menub.set_align_widget(None) menub.show_all() menu.append(mitem1) menu.append(mitem2) menu.attach_to_widget(menub, None) menu.show_all() style = grid.get_style_context() style.add_class(Gtk.STYLE_CLASS_TOOLBAR) grid.attach(menub, 0,0,1,1) self.add(grid) window = MenuExampleWindow() window.connect("delete-event", Gtk.main_quit) window.show_all() Gtk.main()
答案 1 :(得分:0)
假设您使用gtk3 +
gtk_widget_get_style
/ gtk_widget_get_modifier_style
和gtk_widget_set_style
/ gtk_widget_modify_style
应该做你想做的事。请注意,应用哪种样式有一个内置优先级,您无法修改(请参阅上述函数的DocBook条目)