2013-12-10 66 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

經過進一步調查後,我發現小部件(或容器)的風格類影響嵌入式對象的整體風格。

讓我用一個例子進一步解釋:

構建網格並附加包含彈出菜單的菜單按鈕。

將工具欄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_stylegtk_widget_set_style/gtk_widget_modify_style應該做你想要什麼。請注意,有一個內置的優先級風格應用,你不能修改(請參閱上述功能的DocBook條目)

相關問題