1

アプリケーションにボタンがあり、サイズが 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()
4

2 に答える 2

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)
于 2012-12-01T12:35:00.893 に答える
2

私は同様の問題を抱えていて、これを C で解決しました。私は Python プログラマーではありませんが、関連する関数のヒントを提供できるので、タスクを実行できる可能性があります。

まず、gtk.Widget.render_icon を使用してストック アイコンから pixbuf を作成します。次に、gtk.gdk.Pixbuf.scale_simple を介して、必要なサイズにサイズ変更できます。最後のステップとして、この pixbuf から画像を作成し、それをボタンに使用できます。

対応するC関数で完全に機能します。

于 2012-12-04T02:59:20.470 に答える