如何在我的应用程序中制作小股票图标?

时间:2012-12-01 12:26:40

标签: python gtk pygtk stock

我的应用程序中有一个按钮,我希望它的尺寸​​为23x23像素,库存图标为16x16像素。

我想出了:

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

但此代码仅更改按钮的大小而不是图标大小:/

如何在按钮上缩放股票图标?是否有任何小版本的库存商品?像gtk.STOCK_SMALL_CLOSE?

之类的东西

EDIT 以下是测试创建小库存商品的可能性的示例程序

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 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

我有一个类似的问题,并在C中解决了这个问题,虽然我不是Python程序员,但我可以给你一些相关函数的提示,所以你可以完成你的任务:

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

使用相应的C函数完美地为我工作。