2011-08-25 195 views
0

對於在Gtk中創建的彈出菜單,我希望將第一個菜單項作爲標題。最好它的背景應該是白色的。由於--- according to the documentation ---一個不能改變gtk.Label的背景顏色,而是必須改變其容器的背景,在我看來gtk.MenuItem本身應該被修改。如何更改gtk.MenuItem()的背景顏色

不過,我已經妄圖如下:

menu_item.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#FFFFFF')) 

這將爲容器上班gtk.EventBox,但gtk.MenuItem事實並非如此。上面沒有工作,我能做些什麼來讓這個gtk.MenuItem背景變成白色?

PS:我寧可不使用任何.rc文件。

+0

看起來像你不能。我試過在C中沒有運氣:(我沒有看看源代碼,但我猜MenuItem沒有「NORMAL」狀態?如果你將狀態參數改成STATE_SELECTED,它會改變背景顏色在老鼠身上 – qingbo

+0

這就是我爲什麼不喜歡Gtk的原因(感覺事情是這樣的,所以不能設計一個人的圖形用戶界面)感謝+也許你應該把它作爲答案。 – Benjamin

+0

@Benjamin,所以你不能設計你的GUI風格,GTK的設計哲學是,主題應該留給用戶,應用程序應該呈現一致的外觀,而且GTK的一大賣點是可訪問性。如果用戶想要顏色,他們會安裝一個豐富多彩的主題,所以推理。 – ptomato

回答

1

這是一個樣例,當鼠標在它上面時將「退出」菜單置於白色。希望它能幫助你!

#!/usr/bin/python 

import gtk 

class PyApp(gtk.Window): 

    def __init__(self): 
     super(PyApp, self).__init__() 

     self.set_title("Simple menu") 
     self.set_size_request(250, 200) 
     self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(6400, 6400, 6440)) 
     self.set_position(gtk.WIN_POS_CENTER) 

     mb = gtk.MenuBar() 

     filemenu = gtk.Menu() 
     filem = gtk.MenuItem("File") 
     filem.set_submenu(filemenu) 

     exit = gtk.MenuItem("Exit") 
     style = exit.get_style().copy() 
     style.bg[gtk.STATE_NORMAL] = exit.get_colormap().alloc_color (0xffff, 0x0000, 0x0000) 
     exit.set_style (style) 

     exit.connect("activate", gtk.main_quit) 
     filemenu.append(exit) 

     mb.append(filem) 

     vbox = gtk.VBox(False, 2) 
     vbox.pack_start(mb, False, False, 0) 

     self.add(vbox) 

     self.connect("destroy", gtk.main_quit) 
     self.show_all() 

PyApp() 
gtk.main() 

要做到這一點,我玩「風格」。

+0

謝謝:)當我嘗試這個,但是,前景顏色(文字)變化,而不是背景d。這與你一樣嗎?從'self.modify_bg(gtk.STATE_NORMAL,gtk.gdk.Color(6400,6400,6440))'和'style.bg [gtk.STATE_NORMAL] = exit.get_colormap()。alloc_color(0xffff,0x0000,0x0000) '我把它的背景應該改變,對吧? – Benjamin

+0

確實,背景對我而言是變化的,變成了白色(並且使其上的白色文字無法閱讀!)。也許看看使用的「主題」。用「主題」來嘗試改變這種顏色可能是值得的,這樣一些可憐的筆記本電腦用戶仍然可以改變設置來使用它。 – Louis

+0

事實上,在Gtk中改變樣式最簡單的方法是使用資源文件。我的機器上的當前主題可能會覆蓋本地更改。這也是爲什麼我更喜歡Qt到Gtk :) – Benjamin