PyGTK - ट्री व्यू क्लास

ट्रीव्यू विजेट gtk.TreeModel इंटरफ़ेस को लागू करने वाले मॉडल की सामग्री प्रदर्शित करता है। PyGTK निम्नलिखित प्रकार के मॉडल प्रदान करता है -

  • gtk.ListStore
  • gtk.TreeStore
  • gtk.TreeModelSort

ListStore एक सूची मॉडल है। जब gtk.TreeView विजेट के साथ संबद्ध किया जाता है, तो यह सूची बॉक्स का उत्पादन करता है जिसमें से चयनित आइटम हैं। सिंटैक्स के साथ एक gtk.ListStore ऑब्जेक्ट घोषित किया जाता है -

store = gtk.ListStore(column_type)

एक सूची में कई कॉलम हो सकते हैं, पूर्वनिर्धारित प्रकार स्थिरांक हैं -

  • gobject.TYPE_BOOLEAN
  • gobject.TYPE_BOXED
  • gobject.TYPE_CHAR
  • gobject.TYPE_DOUBLE
  • gobject.TYPE_ENUM
  • gobject.TYPE_FLOAT
  • gobject.TYPE_INT
  • gobject.TYPE_LONG
  • gobject.TYPE_NONE
  • gobject.TYPE_OBJECT
  • gobject.TYPE_STRING
  • gobject.TYPE_UCHAR
  • gobject.TYPE_UINT
  • gobject.TYPE_ULONG
  • gtk.gdk.pixbuf आदि।

उदाहरण के लिए, स्ट्रिंग आइटम को संग्रहीत करने के लिए एक ListStore ऑब्जेक्ट के रूप में घोषित किया जाता है -

store = gtk.ListStore(gobject.TYPE_STRING

स्टोर में आइटम जोड़ने के लिए, एपेंड () विधियों का उपयोग किया जाता है -

store.append (["item 1"])

TreeStore मल्टी-कॉलम ट्री विजेट के लिए एक मॉडल है। उदाहरण के लिए, निम्न कथन एक आइटम बनाता है जिसमें स्ट्रिंग आइटम होता है।

Store = gtk.TreeStore(gobject.TYPE_STRING)

ट्रीस्टोर में आइटम जोड़ने के लिए, एपेंड () विधि का उपयोग करें। परिशिष्ट () विधि में दो पैरामीटर हैं, अभिभावक और पंक्ति। टॉपलेवल आइटम जोड़ने के लिए, माता-पिता कोई नहीं है।

row1 = store.append(None, ['row1'])

कई पंक्तियों को जोड़ने के लिए आपको इस कथन को दोहराना होगा।

चाइल्ड रो को जोड़ने के लिए, एपलेंड () विधि के लिए मुख्य पैरामीटर के रूप में टॉपवेल पंक्ति को पास करें -

childrow = store.append(row1, ['child1'])

कई चाइल्ड रो को जोड़ने के लिए आपको इस कथन को दोहराना होगा।

अब, एक ट्री व्यू विजेट बनाएं और ऊपर ट्रीस्टॉर ऑब्जेक्ट को मॉडल के रूप में उपयोग करें।

treeview = gtk.TreeView(store)

अब हमें स्टोर डेटा प्रदर्शित करने के लिए TreeViewColumn बनाना होगा। Gtk.TreeViewColumn का उद्देश्य हेडर और gtk.CelRenderer का उपयोग कर कोशिकाओं का प्रबंधन करता है। ट्री व्यूकोल्यूमेंट ऑब्जेक्ट निम्नलिखित कंस्ट्रक्टर का उपयोग करके बनाया गया है -

gtk.TreeViewColumn(title, cell_renderer,…)

शीर्षक और रेंडरर के अलावा, यह शून्य या अधिक विशेषता = कॉलम जोड़े लेता है जिसमें निर्दिष्ट किया जाता है कि किस ट्री मॉडल कॉलम में विशेषता का मान पुनर्प्राप्त किया जाना है। ये पैरामीटर नीचे दिए गए TreeViewColumn क्लास के तरीकों का उपयोग करके भी सेट किए जा सकते हैं।

एक gtk.CellRenderer विभिन्न प्रकार के डेटा प्रदान करने के लिए वस्तुओं के एक समूह के लिए एक आधार वर्ग है। व्युत्पन्न वर्ग CellRendererText, CellRendererPixBuf और CellRendererToggle हैं।

TreeViewColumn क्लास के निम्नलिखित तरीकों का उपयोग इसकी वस्तु को कॉन्फ़िगर करने के लिए किया जाता है -

  • TreeViewColumn.pack_start (सेल, एक्सपेंड = ट्रू) - यह विधि सेलरेंडर ऑब्जेक्ट को शुरुआती कॉलम में पैक करती है। यदि विस्तार पैरामीटर सही पर सेट है, तो पूरे आवंटित स्थान को कॉलम सेल को सौंपा गया है।

  • TreeViewColumn.add_attribute (सेल, विशेषता, कॉलम) - यह विधि ट्री कॉलम में सूची में एक विशेषता मैपिंग जोड़ती है। column ट्री मॉडल का कॉलम है।

  • TreeViewColumn.set_attributes () - यह विधि के विशेषता स्थानों को सेट करती है renderer का उपयोग करते हुए attribute = column जोड़े

  • TreeViewColumn.set_v अदृश्य () - यदि True, ट्रीव्यू कॉलम दिखाई देता है

  • TreeViewColumn.set_title () - यह विधि निर्दिष्ट मान के लिए "शीर्षक" गुण सेट करती है।

  • TreeViewColumn.set_lickable () - यदि सही पर सेट है, तो हेडर कीबोर्ड फ़ोकस ले सकता है, और क्लिक किया जा सकता है।

  • TreeViewColumn.set_alignment (xalign) - यह विधि "मान" गुण को "मान" पर सेट करती है xalign

"क्लिक किया गया" संकेत तब उत्सर्जित किया जाता है जब उपयोगकर्ता ट्रीव्यूकल्लुमेंट हेडर बटन पर क्लिक करता है ।

TreeViewColumn ऑब्जेक्ट को कॉन्फ़िगर करने के बाद, इसे append_column () विधि का उपयोग करके TreeView विजेट में जोड़ा जाता है।

ट्रीव्यू वर्ग के महत्वपूर्ण तरीके निम्नलिखित हैं -

  • TreevVew.set_model () - यह ट्रीव्यू के लिए "मॉडल" गुण सेट करता है। यदि ट्रीव्यू में पहले से ही एक मॉडल सेट है, तो यह विधि नए मॉडल को सेट करने से पहले हटा देगी। अगरmodel है None, यह पुराने मॉडल को परेशान करेगा।

  • TreeView.set_header_clickable () - यदि सही पर सेट है, तो कॉलम शीर्षक बटन पर क्लिक किया जा सकता है।

  • TreeView.append_column () - यह निर्दिष्ट करता है TreeViewColumn स्तंभों की सूची

  • TreeView.remove_column () - यह ट्रीव्यू से निर्दिष्ट कॉलम को हटाता है।

  • TreeView.insert_column () - यह निर्दिष्ट को सम्मिलित करता है column द्वारा निर्दिष्ट स्थान पर ट्रीव्यू में position

ट्रीव्यू विजेट निम्नलिखित संकेतों का उत्सर्जन करता है -

कर्सर-बदल कर्सर के चलने या सेट होने पर यह उत्सर्जित होता है।
विस्तार पतन-कर्सर पंक्ति यह उत्सर्जित होता है जब कर्सर पर पंक्ति को विस्तारित या ढहने की आवश्यकता होती है।
पंक्ति सक्रिय जब उपयोगकर्ता डबल क्लिक करता है तो यह उत्सर्जित होता है treeview पंक्ति
पंक्ति-ढह यह तब उत्सर्जित होता है जब कोई पंक्ति उपयोगकर्ता या प्रोग्रामेटिक कार्रवाई द्वारा ढह जाती है।
पंक्ति-विस्तार यह तब उत्सर्जित होता है जब उपयोगकर्ता या प्रोग्रामेटिक एक्शन के माध्यम से एक पंक्ति का विस्तार किया जाता है।

ट्री व्यू विजेट के दो उदाहरण नीचे दिए गए हैं। पहला उदाहरण एक साधारण सूची दृश्य का निर्माण करने के लिए एक सूचीस्टोर का उपयोग करता है।

यहां एक ListStore ऑब्जेक्ट बनाया जाता है और स्ट्रिंग आइटम इसमें जोड़े जाते हैं। यह ListStore ऑब्जेक्ट ट्री व्यू ऑब्जेक्ट के मॉडल के रूप में उपयोग किया जाता है -

store = gtk.ListStore(str)

treeView = gtk.TreeView()
treeView.set_model(store)

तब एक CellRendererText एक TreeViewColumn ऑब्जेक्ट में जोड़ा जाता है और उसी को TreeView में जोड़ा जाता है।

rendererText = gtk.CellRendererText()
column = gtk.TreeViewColumn("Name", rendererText, text = 0)
treeView.append_column(column)

ट्री व्यू ऑब्जेक्ट को एक स्थिर कंटेनर में जोड़कर सबसे ऊपर की खिड़की पर रखा गया है।

उदाहरण 1

निम्नलिखित कोड देखें -

import pygtk
pygtk.require('2.0')
import gtk

class PyApp(gtk.Window):
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("TreeView with ListStore")
      self.set_default_size(250, 200)
      self.set_position(gtk.WIN_POS_CENTER)
		
      store = gtk.ListStore(str)
      store.append (["PyQt"])
      store.append (["Tkinter"])
      store.append (["WxPython"])
      store.append (["PyGTK"])
      store.append (["PySide"])
      
      treeView = gtk.TreeView()
      treeView.set_model(store)
		
      rendererText = gtk.CellRendererText()
      column = gtk.TreeViewColumn("Python GUI Libraries", rendererText, text=0)
      treeView.append_column(column)
      
      fixed = gtk.Fixed()
      lbl = gtk.Label("select a GUI toolkit")
      fixed.put(lbl, 25,75)
      fixed.put(treeView, 125,15)
		
      lbl2 = gtk.Label("Your choice is:")
      fixed.put(lbl2, 25,175)
      self.label = gtk.Label("")
		
      fixed.put(self.label, 125,175)
      self.add(fixed)
      
      treeView.connect("row-activated", self.on_activated)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
		
   def on_activated(self, widget, row, col):
      
	  model = widget.get_model()
      text = model[row][0]
      self.label.set_text(text)
		
def main():
   gtk.main()
   return

if __name__ == "__main__":
   bcb = PyApp()
   main()

उपयोगकर्ता द्वारा चयनित आइटम को विंडो में एक लेबल पर प्रदर्शित किया जाता है on_activated callback फ़ंक्शन को लागू किया जाता है।

उदाहरण 2

दूसरा उदाहरण एक ट्रीस्टोर से एक पदानुक्रमित ट्री व्यू बनाता है। यह प्रोग्राम स्टोर के निर्माण के उसी क्रम का अनुसरण करता है, जिसे ट्री व्यू के लिए मॉडल के रूप में सेट करके, ट्री व्यू व्यू को डिजाइन करके ट्रीव्यू में जोड़ा जाता है।

import gtk

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      
	  self.set_title("TreeView with TreeStore")
      self.set_size_request(400,200)
      self.set_position(gtk.WIN_POS_CENTER)
      vbox = gtk.VBox(False, 5)
      
      # create a TreeStore with one string column to use as the model
      store = gtk.TreeStore(str)
      
      # add row
      row1 = store.append(None, ['JAVA'])
      
      #add child rows
      store.append(row1,['AWT'])
      store.append(row1,['Swing'])
      store.append(row1,['JSF'])
      
      # add another row
      row2 = store.append(None, ['Python'])
      store.append(row2,['PyQt'])
      store.append(row2,['WxPython'])
      store.append(row2,['PyGTK'])
      
      # create the TreeView using treestore
      treeview = gtk.TreeView(store)
      tvcolumn = gtk.TreeViewColumn('GUI Toolkits')
      treeview.append_column(tvcolumn)
		
      cell = gtk.CellRendererText()
      tvcolumn.pack_start(cell, True)
      tvcolumn.add_attribute(cell, 'text', 0)
      vbox.add(treeview)
		
      self.add(vbox)
      
	  self.connect("destroy", gtk.main_quit)
      self.show_all()

PyApp()
gtk.main()

निम्नलिखित TreeView एक उत्पादन के रूप में प्रदर्शित किया जाता है -