آموزش کلاس TreeView در PyGTK

3 سال پیش
آموزش کلاس TreeView در PyGTK

آموزش کلاس TreeView در PyGTK

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش کلاس TreeView در PyGTK خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش صفر تا صد پایتون

ویجت Treeview محتویات یک مدل رابط gtk.TreeModel را نمایش می دهد. PyGTK انواع زیر را ارائه می دهد –

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

ListStore یک مدل لیست است. هنگامی که با یک ویجت gtk.TreeView مرتبط است، یک جعبه List ایجاد می کند که شامل مواردی است که باید از آنها انتخاب شود. یک شی 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 etc.

به عنوان مثال، یک شیء ListStore برای ذخیره موارد رشته به صورت –

store = gtk.ListStore(gobject.TYPE_STRING

 

برای افزودن موارد در فروشگاه ، از روش های ()append استفاده می شود –

store.append (["item 1"])

 

TreeStore یک مدل برای ویجت درختی چند ستونی است. به عنوان مثال، عبارت زیر یک فروشگاه با یک ستون دارای آیتم رشته ایجاد می کند.

Store = gtk.TreeStore(gobject.TYPE_STRING)

 

برای افزودن موارد در TreeStore، از متد () append استفاده کنید. متد () append دو پارامتر دارد: والد و سطر. برای افزودن مورد سطح بالا ، والد هیچکدام نیست.

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

 

برای افزودن چند سطر باید این عبارت را تکرار کنید.

برای افزودن سطرهای فرزند، سطر toplevel را به عنوان پارامتر والد به متد ()append منتقل کنید –

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

 

برای افزودن چند ردیف فرزند باید این عبارت را تکرار کنید.

اکنون یک ویجت TreeView ایجاد کنید و از شیء TreeStore فوق به عنوان مدل استفاده کنید.

treeview = gtk.TreeView(store)

 

اکنون باید TreeViewColumn را برای نمایش داده های ذخیره ایجاد کنیم. هدف gtk.TreeViewColumn هدر و سلولها را با استفاده از gtk.CelRenderer مدیریت می کند. شیء TreeViewColumn با استفاده از سازنده زیر ایجاد می شود –

gtk.TreeViewColumn(title, cell_renderer,…)

 

علاوه بر عنوان و ارائه دهنده، صفر یا بیشتر به جفت  attribute=column نیاز است تا مشخص شود که مقدار ویژگی از کدام ستون مدل درختی بازیابی می شود. این پارامترها را می توان با استفاده از متدهای کلاس TreeViewColumn که در زیر آمده است نیز تنظیم کرد.

gtk.CellRenderer یک کلاس پایه برای مجموعه ای از اشیاء برای ارائه انواع مختلف داده است. کلاسهای مشتق شده عبارتند از CellRendererText ، CellRendererPixBuf و CellRendererToggle.

روشهای زیر از کلاس TreeViewColumn برای پیکربندی شیء آن استفاده می شود –

  • TreeViewColumn.pack_start(cell, expand = True) – این روش شیء CellRenderer را در ستون آغازین بسته بندی می کند. اگر پارامتر expand روی True تنظیم شود ، ستون ها کل فضای اختصاص داده شده را به سلول اختصاص می دهند.
  • TreeViewColumn.add_attribute(cell, attribute, column) – این روش یک نگاشت ویژگی را به لیست ستون درخت اضافه می کند. ستون ستون مدل درخت است.
  • ()TreeViewColumn.set_attributes  – این متد با استفاده از جفت های ستون \ u003d ویژگی های رندر را تعیین می کند
  • ()TreeViewColumn.set_visible  – اگر True باشد، ستون treeview قابل مشاهده است
  • ()TreeViewColumn.set_title – این روش ویژگی “title” را بر روی مقدار مشخص شده تنظیم می کند.
  • ()TreeViewColumn.set_lickable – اگر روی True تنظیم شود، هدر می تواند تمرکز صفحه کلید را بگیرد و روی آن کلیک شود.
  • TreeViewColumn.set_alignment (xalign) – این روش ویژگی “تراز” را در مقدار xalign تنظیم می کند.

سیگنال “کلیک شده” هنگامی که کاربر روی دکمه سربرگ treeviewcolumn کلیک می کند، منتشر می شود.

پس از پیکربندی شی TreeViewColumn ، با استفاده از متد ()append_column به ویجت TreeView اضافه می شود.

 

در زیر روشهای مهم کلاس TreeView آمده است –

  • ()TreevVew.set_model () – این ویژگی “model” را برای treeview تنظیم می کند. اگر treeview قبلاً دارای مجموعه مدل بوده است ، این روش قبل از تنظیم مدل جدید آن را حذف می کند. اگر مدل None باشد ، مدل قبلی را برمی دارد.
  • ()TreeView.set_header_clickable – اگر روی True تنظیم شود، روی دکمه های عنوان ستون می توان کلیک کرد.
  • ()TreeView.append_column  – این TreeViewColumn مشخص شده را به لیست ستون ها اضافه می کند.
  • ()TreeView.remove_column  – این ستون مشخص شده را از نمای درخت حذف می کند.
  • ()TreeView.insert_column – این ستون مشخص شده را در نمای درختی در محل مشخص شده توسط موقعیت قرار می دهد.

ویجت TreeView سیگنال های زیر را منتشر می کند –

cursor-changed هنگامی که مکان نما حرکت می کند یا تنظیم می شود ، منتشر می شود.
expand-collapse-cursor-row این زمانی منتشر می شود که ردیف مکان نما نیاز به بزرگ شدن یا جمع شدن داشته باشد.
row-activated هنگامی که کاربر روی ردیف درخت نما دوبار کلیک می کند، منتشر می شود
row-collapsed هنگامی که یک ردیف توسط کاربر یا اقدام برنامه ای جمع می شود، منتشر می شود.
row-expanded هنگامی که یک سطر از طریق کاربر یا اقدام برنامه ای گسترش یابد ، منتشر می شود.

 

دو نمونه از ویجت TreeView در زیر آورده شده است. مثال اول از ListStore برای تولید یک ListView ساده استفاده می کند.

در اینجا یک شیء ListStore ایجاد می شود و موارد رشته ای به آن اضافه می شود. این شی ListStore به عنوان مدل برای شی TreeView استفاده می شود –

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)

 

TreeView Object با افزودن آن به یک ظرف ثابت در پنجره سطح بالا قرار می گیرد.

مثال ۱

کد زیر را رعایت کنید –

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 فراخوانی می شود.

TreeView with ListStore

مثال ۲

مثال دوم یک TreeView سلسله مراتبی را از TreeStore ایجاد می کند. این برنامه همان دنباله ساخت فروشگاه را دنبال می کند، آن را به عنوان مدل TreeView، طراحی TreeViewColumn و الحاق آن به TreeView دنبال می کند.

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 زیر به عنوان خروجی نمایش داده می شود –

TreeView with TreeStore

 

منبع.

 

 

لیست جلسات قبل آموزش PyGTK

  1. آموزش PyGTK
  2. معرفی PyGTK
  3. آموزش محیط  PyGTK
  4. آموزش Hello World در  PyGTK
  5. آموزش کلاس های مهم در  PyGTK
  6. آموزش کلاس پنجره در PyGTK
  7. آموزش کلاس دکمه در PyGTK
  8. آموزش کلاس لیبل در PyGTK
  9. آموزش کلاس ورود در PyGTK
  10. آموزش مدیریت سیگنال در PyGTK
  11. آموزش مدیریت رویداد در PyGTK
  12. آموزش کانتینر در PyGTK
  13. آموزش کلاس جعبه در PyGTK
  14. آموزش کلاس ButtonBox در PyGTK
  15. آموزش کلاس تراز در PyGTK
  16. آموزش کلاس EventBox در PyGTK
  17. آموزش کلاس Layout در PyGTK
  18. آموزش کلاس ComboBox در PyGTK
  19. آموزش کلاس ToggleButton در PyGTK
  20. آموزش کلاس CheckButton در PyGTK
  21. آموزش کلاس RadioButton در PyGTK
  22. آموزش MenuBar ،Menu و MenuItem در PyGTK
  23. آموزش کلاس نوار ابزار در PyGTK
  24. آموزش کلاس Adjustment در PyGTK
  25. موزش کلاس Range در PyGTK
  26. آموزش کلاس Scale در PyGTK
  27. آموزش کلاس Scrollbar در PyGTK
  28. آموزش کلاس Dialog در PyGTK
  29. آموزش کلاس MessageDialog در PyGTK
  30. آموزش کلاس AboutDialog در PyGTK
  31. آموزش کلاس FontSelection در PyGTK
  32. آموزش کلاس Color Selection در PyGTK
  33. آموزش دیالوگ انتخاب فایل در PyGTK
  34. آموزش کلاس نوت بوک در PyGTK
  35. آموزش کلاس فریم در PyGTK
  36. آموزش کلاس AspectFrame در PyGTK
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه