2011-08-25 219 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