2013-12-10 2 views
1

Мои текущие всплывающие окна GTK выглядят так: обратите внимание, что тема темной атмосферы меняется.Как скопировать стиль GTK виджета и применить его к другому?

pic

В GTK3.8, а затем есть GTKMenuButtons - всплывающее окно выглядит следующим образом - обратите внимание, похоже, он использует сигналы кнопки стиля.

pic

Мне нравится этот стиль, и я хочу, чтобы мои всплывающие окна приложения выглядят одинаково, так что это лучше выглядеть - интеграция и чувствовать.

Я знаю, что могу переопределить цвет фона всплывающего окна, используя этот фрагмент кода Python:

 
style = button.get_style_context() 
color = style.get_background_color(Gtk.StateFlags.NORMAL) 
popup_menu.override_background_color(Gtk.StateFlags.NORMAL, color) 

Похоже, это если я применить цвет фона кнопки.

pic

Я понятия не имею, как применить цвет кнопки шрифта в всплывающем окне.

Что еще более важно, это раздражающая черная рамка - ширина 1px?

Таким образом, к моему вопросу - я пытаюсь это правильно (переопределить свойства темы) или могу каким-то образом применить стиль CSS одного виджета (кнопку или всплывающее окно) во всплывающем окне, чтобы я мог имитировать всплывающее меню menubutton стиль?

Дополнительная информация - источник GTKMenuButton gtkmenubutton.c не имеет элементов управления тегами для всплывающего окна, поэтому я затрудняюсь с тем, как всплывающее меню menubutton получает свою тему.

ответ

1

После дальнейшего изучения я обнаружил, что класс стиля виджета (или контейнера) влияет на общий стиль встроенных объектов.

Позвольте мне объяснить далее на примере:

Построить сетку и прикрепить кнопку MENU, содержащую всплывающее меню.

Добавление панели инструментов StyleClass в сетку влияет на все объекты в этой сетке, включая всплывающее окно.

style = grid.get_style_context() 
style.add_class(Gtk.STYLE_CLASS_TOOLBAR) 

Результат таков:

Imgur

 

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

0

Предполагая, что вы используете GTK3 +

gtk_widget_get_style/gtk_widget_get_modifier_style и gtk_widget_set_style/gtk_widget_modify_style должны делать то, что вы хотите. Будьте осторожны, есть встроенный приоритет, для которого применяется стиль, который вы не можете изменить (см. Записи DocBook для вышеуказанных функций)

Смежные вопросы