【问题标题】:How can i make small stock icons in my application?如何在我的应用程序中制作小型股票图标?
【发布时间】:2012-12-01 12:26:40
【问题描述】:

我的应用程序中有一个按钮,我希望它的尺寸​​为 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()

【问题讨论】:

    标签: python gtk pygtk stock


    【解决方案1】:

    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)
    

    【讨论】:

    • 同意,但是如果不是绝对必要的话,我宁愿使用image = gtk.image_new_from_stock (gtk.STOCK_CLOSE, gtk.ICON_SIZE_SMALL_TOOLBAR) 之类的东西,也不愿使用我自己的尺寸。
    • 嗯,似乎它不起作用,我的图标不小:/我编辑了我的问题并添加了简单的测试程序。
    • 在测试时,我注意到两点:1. 不能指定数字图标大小,例如 16,而只能指定常量 gtk.ICON_SIZE_*。 2. gtk.ToolButton 中有一种魔力,使它忽略给定的大小(我想是主题的默认值)。因此,如果您真的想覆盖它,请使用 gtk.Button。或者这样做是因为您没有将按钮放在工具栏中。如果您确实将它们放在工具栏中,请使用 ToolButton 并让 gtk 使用工具栏图标大小的主题设置。
    • 您可以通过在图像上设置pixel-size 属性来覆盖图标大小常量。
    【解决方案2】:

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

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

    使用相应的 C 函数非常适合我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 2012-06-28
      相关资源
      最近更新 更多