कुछ कार्यक्रमों में ब्लैक हेडर विजेट क्या है?


22

Ubuntu प्रोग्राम्स (ubuntu control panel, system settings) में से कुछ में, लेकिन banshee में नहीं, खिड़की के शीर्ष भाग में डार्क टोन (एम्बिएंस थीम के साथ) तत्व होते हैं। लेकिन मैं एक मानक विजेट नहीं ढूँढ सकता जो यह स्वचालित रूप से करता है।

क्या ये रंग सभी हाथ से सेट होते हैं (मानक विजेट + थीम के बजाय)? और अगर वे हाथ से सेट होते हैं, तो वे विषय में कहां से आते हैं (gtk_widget_modify_bg (विजेट, GTK_STATE_NORMAL, और रंग) में पैरामीटर क्या हैं)?

संपादित करें: यह एक साधारण Gtk.Toolbar नहीं लगता है। यदि मैं निम्नलिखित कोड चलाता हूं:

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()

मुझे इस तरह से एक विंडो मिलती है: यहाँ छवि विवरण दर्ज करें जिसमें टूलबार के लिए गहरा टोन नहीं है।

EDIT2: हालांकि j-jhan-edwards द्वारा 'विशेष संदर्भ वाला टूलबार' उत्तर अधिकांश कार्यक्रमों में सही है, लेकिन यह ubuntuone-control-panel में ऐसा नहीं है। इस कार्यक्रम में एक GtkVBox है, जिसमें किसी भी श्रेणी के विजेट्स (टूलबार के विपरीत) शामिल हो सकते हैं। मैं अभी भी यह निर्धारित करने में असमर्थ हूं कि विंडो के उस हिस्से को कैसे चित्रित किया जाए। यहाँ छवि विवरण दर्ज करें

लेकिन वैसे भी: अब के लिए एक उपकरण पट्टी मेरे लिए पर्याप्त है ...

जवाबों:


19

क्या आपका ये मतलब है?

GTK3 टूलबार

वे सिर्फ Gtk.Toolbarएस। बंशी जैसे कुछ अनुप्रयोगों का उपयोग नहीं करने का कारण यह है कि उन्होंने अभी तक जीटीके + 3 को पोर्ट नहीं किया है , और नए थीमिंग क्षमताओं को प्राप्त किया है जो टूलबार जैसे सक्षम करते हैं।

अपने स्वयं के पायथन एप्लिकेशन को GTK + 3 में पोर्ट करने के लिए, आपको PyGTK के बजाय PyGObject का उपयोग करने की आवश्यकता है। 12.04 के रूप में, त्वरित रूप से डिफ़ॉल्ट रूप से PyGObject प्रोजेक्ट उत्पन्न करेगा।

आपको primary-toolbarटूलबार शैली के संदर्भ में भी जोड़ना होगा। इस तरह:

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

प्रश्न के उदाहरण में उस संदर्भ को लागू करने से यह परिणाम होता है:

डेमो


मैंने एक Gtk.Toolbar का उदाहरण जोड़ा है जो अंधेरे की तरह नहीं दिखता है। तो मुझे लगता है कि यह एक साधारण Gtk.Toolbar नहीं है?
xubuntix

Gtk.get_major_version()कहते हैं 3, लेकिन मुझे अभी भी पुराने टूलबार मिल रहे हैं। यह from gi.repository import Gtkpython2 और python3 दोनों में एक के बाद है ।
Stefano Palazzo

1
आपके द्वारा पोस्ट किए गए लिंक से PyGI डेमो उनके पास भी नहीं है। शायद ऐप डेवलपर्स को स्टाइल को स्वयं लागू करना होगा?
स्टेफानो पलाज़ो

इसके लिए धन्यवाद मेरे सिर को एक दीवार के खिलाफ पूरी सुबह पीट रहा है !! पहले यहाँ खोजा जाना चाहिए।
0x7c0

5

आपके प्रश्न के दूसरे भाग के संबंध में, जो "टूलबॉक्स में VBox को कैसे जोड़ा जाए", आपको बस इतना करना है कि इसे Gtk.ToolItem, जैसे: के अंदर लपेटें।

...
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)
...

आप उदाहरण के लिए एक सहायक समारोह बनाकर या Gtk.Toolbar का विस्तार करके इसे सरल बना सकते हैं:

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

यह केवल यह जाँचता है कि आप जिस वस्तु को सम्मिलित करने का प्रयास करते हैं वह एक टूलआइटम है, और यदि नहीं, तो यह इसे एक के अंदर लपेट देता है। उपयोग उदाहरण:

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()

इसे इस तरह देखना चाहिए


1
रिकॉर्ड के लिए, आप इसे ग्लेड के साथ भी कर सकते हैं। GtkToolItem विगेट्स के पैलेट में दिखाई नहीं देता है। इसके बजाय आपको ऑब्जेक्ट ट्री में GtkToolbar पर राइट-क्लिक करना होगा और एक अलग संपादन विंडो खोलने के लिए "संपादित करें" चुनें। "पदानुक्रम" टैब पर जाएं और पदानुक्रम में एक नई वस्तु जोड़ें। डिफ़ॉल्ट ऑब्जेक्ट-प्रकार "बटन" है, लेकिन आप "कस्टम" भी चुन सकते हैं। यह "कस्टम" आइटम वास्तव में एक खाली GtkToolItem है। तब आप नियमित रूप से खुश इंटरफ़ेस का उपयोग करके उस खाली आइटम का चयन कर सकते हैं और सामान्य रूप से विजेट जोड़ सकते हैं। इसने मुझे सेकंड के एक मामले में GtkToolbar में GtkEntry विजेट जोड़ने की अनुमति दी।
मोनकोटस्कर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.