2012-12-01 22 views
1

我在我的应用程序中有一个按钮,我希望它具有尺寸23x23像素与股票图标16x16像素。如何在我的应用程序中制作小型股票图标?

我想出了:

closeButton = gtk.ToolButton(gtk.STOCK_CLOSE) 
closeButton.set_size_request(23, 23) 

但是这个代码仅改变按键的大小,而不是图标的大小:/

我怎么能扩展我的按钮图标的股票?是否有任何小版本的库存项目?像gtk.STOCK_SMALL_CLOSE一样?

编辑 下面是示例程序来测试创建小股票项目

import gtk 

class Tab(gtk.VBox): 
    def __init__(self, caption): 
     gtk.VBox.__init__(self) 
     self.Label = self.__createLabel(caption) 
     self.show_all() 

    def __createLabel(self, caption): 
     hbox = gtk.HBox() 
     label = gtk.Label(caption) 
     hbox.pack_start(label, True, True) 
     closeButton = gtk.ToolButton(self._getCloseIcon()) 
     hbox.pack_start(closeButton, False, False) 
     hbox.show_all() 
     return hbox 

    def _getCloseIcon(self): 
     raise NotImplementedError 

class TabWithNormalIcons(Tab): 
    def __init__(self, caption): 
     Tab.__init__(self, caption) 

    def _getCloseIcon(self): 
     return gtk.STOCK_CLOSE 

class TabWithImage16Icons(Tab): 
    def __init__(self, caption): 
     Tab.__init__(self, caption) 

    def _getCloseIcon(self): 
     return gtk.image_new_from_stock(gtk.STOCK_CLOSE, 16) 

class TabWithSmallToolbarIcons(Tab): 
    def __init__(self, caption): 
     Tab.__init__(self, caption) 

    def _getCloseIcon(self): 
     return gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_SMALL_TOOLBAR) 

class TabWithMenuIcons(Tab): 
    def __init__(self, caption): 
     Tab.__init__(self, caption) 

    def _getCloseIcon(self): 
     return gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU) 

class App(gtk.Window): 
    def __init__(self): 
     gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) 
     self.connect('destroy', lambda event: gtk.main_quit()) 
     self.set_default_size(640, 480) 
     notebook = gtk.Notebook() 
     tabNumber = 1 

     #Icon normal sizes 
     for i in range(3): 
      tab = TabWithNormalIcons('Tab %s' % str(tabNumber)) 
      notebook.append_page(tab, tab.Label) 
      tabNumber += 1 

     #Icons with 16 pixel Image 
     for i in range(3): 
      tab = TabWithImage16Icons('Tab %s' % str(tabNumber)) 
      notebook.append_page(tab, tab.Label) 
      tabNumber += 1 

     #Icons with small toolbar images 
     for i in range(3): 
      tab = TabWithSmallToolbarIcons('Tab %s' % str(tabNumber)) 
      notebook.append_page(tab, tab.Label) 
      tabNumber += 1 

     #Icons with menu images 
     for i in range(3): 
      tab = TabWithMenuIcons('Tab %s' % str(tabNumber)) 
      notebook.append_page(tab, tab.Label) 
      tabNumber += 1 
     self.add(notebook) 
     self.show_all() 

a = App() 
gtk.main() 

回答

2

set_size_request只定义你想要一个小部件有最小尺寸的可能性。所以确实,它不会扩大儿童的规模,而且在儿童需要时也不会妨碍儿童成长。如果可以的话,那不会是你想要的:它仍然会绘制大图标,但将其剪切到按钮上。

所以你想要的是让你的股票产品具有不同的尺寸。我认为最简单的方法是创建一个gtk.Image,您可以在其中指定库存大小。然后将该小部件插入到您的按钮中而不是股票价值。

,这样,代码:

image = gtk.image_new_from_stock (gtk.STOCK_CLOSE, gtk.ICON_SIZE_SMALL_TOOLBAR) 
closeButton = gtk.Button() 
closeButton.add (image) 
closeButton.set_size_request (23, 23) 
+2

同意但是,我宁愿使用像'image = gtk.image_new_from_stock(gtk.STOCK_CLOSE,gtk.ICON_SIZE_SMALL_TOOLBAR)'这样比我自己的大小,如果不是绝对必要的话。 – deinonychusaur

+0

嗯,似乎它不工作,我的图标不小:/我编辑我的问题,并添加了简单的测试程序。 – BPS

+0

在对此进行测试时,我注意到两件事:1.您不能指定数字图标大小,例如16,而只能指定常量gtk.ICON_SIZE_ *。 2. gtk.ToolButton中有魔法,它使它忽略给定的大小(我想,使用主题的默认值)。所以如果你真的想重写这个,使用gtk.Button。或者这样做是因为你没有把你的按钮放在工具栏中。如果您确实将它们放入工具栏中,请使用ToolButton并让gtk使用工具栏图标大小的主题设置。 –

2

我有一个类似的问题,解决了这个在C,虽然我没有Python程序员,我可以给你一个提示,在相关功能,所以你也许可以做到你的任务:

首先你用gtk.Widget.render_icon创建一个股票图标的pixbuf。然后,通过gtk.gdk.Pixbuf.scale_simple,您可以将其大小调整为任何需要的大小。作为最后一步,您可以从此pixbuf创建一个图像并将其用作按钮。

完美适用于我的C函数。

相关问题