Bazı programlarda siyah başlık widget'ı nedir?


22

Bazı ubuntu programlarında (ubuntu kontrol paneli, sistem ayarları), ancak örneğin banshee'de değil, pencerenin üst kısmı koyu tonda (Ambience teması ile) öğeler içerir. Ama bunu otomatik olarak yapan standart bir widget bulamıyorum.

Bu renklerin tümü elle mi ayarlanmış (standart widget + tema yerine)? Ve eğer elle ayarlanmışlarsa, temada nereden geliyorlar (gtk_widget_modify_bg içindeki parametreler (widget, GTK_STATE_NORMAL ve renk))?

EDIT: Bu basit bir Gtk.Toolbar gibi görünmüyor. Aşağıdaki kodu çalıştırırsam:

from gi.repository import Gtk
window = Gtk.Window()
window.set_default_size(200, -1)
window.connect("destroy", lambda q: Gtk.main_quit())
toolbar = Gtk.Toolbar()
window.add(toolbar)
toolbutton = Gtk.ToolButton(stock_id=Gtk.STOCK_NEW)
toolbar.add(toolbutton)
window.show_all()
Gtk.main()

Bunun gibi bir pencere alıyorum: görüntü tanımını buraya girin araç çubuğu için koyu tonu yok.

EDIT2: J-johan-edwards'ın 'özel bağlamlı araç çubuğu' yanıtı programların çoğunda doğru olsa da, ubuntuone-kontrol panelinde durum böyle değil. Bu program, herhangi bir widget dizisini (araç çubuğunun aksine) içerebilen bir GtkVBox'a sahiptir. Gtk-temasının pencerenin bu bölümünü nasıl boyayacağını bildiğini hala belirleyemiyorum. görüntü tanımını buraya girin

Ama yine de: şimdilik bir araç çubuğu benim için yeterli ...

Yanıtlar:


19

Bunları mı kastediyorsun?

GTK3 Araç Çubuğu

Onlar sadece Gtk.Toolbars. Banshee gibi bazı uygulamaların bunları kullanmamasının nedeni, henüz GTK + 3'e aktarmadıkları ve bunun gibi araç çubuklarını etkinleştiren yeni tema yetenekleri kazanmış olmalarıdır.

Kendi Python uygulamanızı GTK + 3'e taşımak için PyGTK yerine PyGObject kullanmanız gerekir . 12.04 itibariyle, varsayılan olarak PyGObject projelerini hızlı bir şekilde üretecektir.

Ayrıca primary-toolbararaç çubuğu stili bağlamına eklemeniz gerekir . Bunun gibi:

toolbar = Gtk.Toolbar()
context = toolbar.get_style_context()
context.add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR)

bu bağlamı soru örneğine uygulamak şununla sonuçlanır:

gösteri


Karanlık görünmeyen bir Gtk.Toolbar örneği ekledim. Yani basit bir Gtk.Toolbar değil sanırım?
xubuntix

Gtk.get_major_version()diyor 3, ancak hala eski araç çubuğunu alıyorum. Bu, from gi.repository import Gtkhem python2 hem de python3'teki bir sonucudur.
Stefano Palazzo

1
Gönderdiğiniz bağlantıdaki PyGI demosu da yok. Belki uygulama geliştiriciler, stilleri kendileri uygulamak zorundadır?
Stefano Palazzo

Bunun için teşekkür ederim bütün sabah bir duvara kafamı çarptım !! önce burada aranmalı.
0x7c0

5

Sorunuzun ikinci kısmına gelince, "Araç çubuğuna VBox nasıl eklenir" olarak adlandırmanız gereken tek şey bir Gtk.ToolItem içine koymanızdır, örneğin :.

...
self.toolbar = Gtk.Toolbar()
self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
tool_item = Gtk.ToolItem()
tool_item.add(self.box)
self.toolbar.insert(tool_item, 0)
...

Bir yardımcı işlev oluşturarak veya Gtk.Toolbar'ı genişleterek daha basit hale getirebilirsiniz, örneğin:

custom_toolbar.py

from gi.repository import Gtk

class CustomToolbar(Gtk.Toolbar):
    def __init__(self):
        super(CustomToolbar, self).__init__()
        ''' Set toolbar style '''
        context = self.get_style_context()
        context.add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR)

    def insert(self, item, pos):
        ''' If widget is not an instance of Gtk.ToolItem then wrap it inside one '''
        if not isinstance(item, Gtk.ToolItem):
            widget = Gtk.ToolItem()
            widget.add(item)
            item = widget

        super(CustomToolbar, self).insert(item, pos)
        return item

Eklemeye çalıştığınız nesnenin bir ToolItem olup olmadığını kontrol eder ve eğer değilse, onu bir içine alır. Kullanım örneği:

main.py

#!/usr/bin/python
from gi.repository import Gtk
from custom_toolbar import CustomToolbar

class MySongPlayerWindow(Gtk.Window):
    def __init__(self):
        super(MySongPlayerWindow, self).__init__(title="My Song Player")
        self.set_size_request(640, 480)

        layout = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
        self.add(layout)

        status_bar = Gtk.Statusbar()
        layout.pack_end(status_bar, False, True, 0)

        big_button = Gtk.Button(label="Play music")
        layout.pack_end(big_button, True, True, 0)

        ''' Create a custom toolbar '''
        toolbar = CustomToolbar()
        toolbar.set_style(Gtk.ToolbarStyle.BOTH)        
        layout.pack_start(toolbar, False, True, 0)

        ''' Add some standard toolbar buttons '''
        play_button = Gtk.ToggleToolButton(stock_id=Gtk.STOCK_MEDIA_PLAY)
        toolbar.insert(play_button, -1)

        stop_button = Gtk.ToolButton(stock_id=Gtk.STOCK_MEDIA_STOP)
        toolbar.insert(stop_button, -1)

        ''' Create a vertical box '''
        playback_info = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, margin_top=5, margin_bottom=5, margin_left=10, margin_right=10)

        ''' Add some children... '''
        label_current_song = Gtk.Label(label="Artist - Song Name", margin_bottom=5)
        playback_info.pack_start(label_current_song, True, True, 0)

        playback_progress = Gtk.ProgressBar(fraction=0.6)
        playback_info.pack_start(playback_progress, True, True, 0)

        '''
        Add the vertical box to the toolbar. Please note, that unlike Gtk.Toolbar.insert,
        CustomToolbar.insert returns a ToolItem instance that we can manipulate
        '''
        playback_info_item = toolbar.insert(playback_info, -1)
        playback_info_item.set_expand(True)        

        ''' Add another custom item '''       
        search_entry = Gtk.Entry(text='Search')
        search_item = toolbar.insert(search_entry, -1)
        search_item.set_vexpand(False)
        search_item.set_valign(Gtk.Align.CENTER)

win = MySongPlayerWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

Bu gibi görünmelidir bu


1
Kayıt için, bunu glade ile de yapabilirsiniz. GtkToolItem widget paletinde görünmüyor. Bunun yerine, nesne ağacındaki GtkToolbar'a sağ tıklamanız ve ayrı bir düzenleme penceresi açmak için "Düzenle" yi seçmeniz gerekir. "Hiyerarşi" sekmesine gidin ve hiyerarşiye yeni bir nesne ekleyin. Varsayılan nesne tipi "Button" dır, ancak "custom" i de seçebilirsiniz. Bu "özel" öğe aslında boş bir GtkToolItem'dir. Daha sonra normal memnuniyet arayüzünü kullanarak o boş öğeyi seçebilir ve normal olarak widget ekleyebilirsiniz. Bu, birkaç saniye içinde bir GtkToolbar'a bir GtkEntry widget'ı eklememe izin verdi.
monotasker
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.