آموزش کلاس TreeView در PyGTK
![آموزش کلاس TreeView در PyGTK](https://www.sourcebaran.com/learn/wp-content/uploads/2021/10/037.jpg)
آموزش کلاس TreeView در PyGTK
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش کلاس TreeView در PyGTK خواهیم پرداخت.
پیشنهاد ویژه : پکیج آموزش صفر تا صد پایتون
ویجت Treeview محتویات یک مدل رابط gtk.TreeModel را نمایش می دهد. PyGTK انواع زیر را ارائه می دهد –
- gtk.ListStore
- gtk.TreeStore
- gtk.TreeModelSort
ListStore یک مدل لیست است. هنگامی که با یک ویجت gtk.TreeView مرتبط است، یک جعبه List ایجاد می کند که شامل مواردی است که باید از آنها انتخاب شود. یک شی gtk.ListStore با نحو زیر اعلام می شود –
1 |
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 برای ذخیره موارد رشته به صورت –
1 |
store = gtk.ListStore(gobject.TYPE_STRING |
برای افزودن موارد در فروشگاه ، از روش های ()append استفاده می شود –
1 |
store.append (["item 1"]) |
TreeStore یک مدل برای ویجت درختی چند ستونی است. به عنوان مثال، عبارت زیر یک فروشگاه با یک ستون دارای آیتم رشته ایجاد می کند.
1 |
Store = gtk.TreeStore(gobject.TYPE_STRING) |
برای افزودن موارد در TreeStore، از متد () append استفاده کنید. متد () append دو پارامتر دارد: والد و سطر. برای افزودن مورد سطح بالا ، والد هیچکدام نیست.
1 |
row1 = store.append(None, ['row1']) |
برای افزودن چند سطر باید این عبارت را تکرار کنید.
برای افزودن سطرهای فرزند، سطر toplevel را به عنوان پارامتر والد به متد ()append منتقل کنید –
1 |
childrow = store.append(row1, ['child1']) |
برای افزودن چند ردیف فرزند باید این عبارت را تکرار کنید.
اکنون یک ویجت TreeView ایجاد کنید و از شیء TreeStore فوق به عنوان مدل استفاده کنید.
1 |
treeview = gtk.TreeView(store) |
اکنون باید TreeViewColumn را برای نمایش داده های ذخیره ایجاد کنیم. هدف gtk.TreeViewColumn هدر و سلولها را با استفاده از gtk.CelRenderer مدیریت می کند. شیء TreeViewColumn با استفاده از سازنده زیر ایجاد می شود –
1 |
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 استفاده می شود –
1 2 3 4 |
store = gtk.ListStore(str) treeView = gtk.TreeView() treeView.set_model(store) |
سپس یک CellRendererText به یک شی TreeViewColumn اضافه می شود و همان را به TreeView اضافه می کند.
1 2 3 |
rendererText = gtk.CellRendererText() column = gtk.TreeViewColumn("Name", rendererText, text = 0) treeView.append_column(column) |
TreeView Object با افزودن آن به یک ظرف ثابت در پنجره سطح بالا قرار می گیرد.
مثال 1
کد زیر را رعایت کنید –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
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 فراخوانی می شود.
مثال 2
مثال دوم یک TreeView سلسله مراتبی را از TreeStore ایجاد می کند. این برنامه همان دنباله ساخت فروشگاه را دنبال می کند، آن را به عنوان مدل TreeView، طراحی TreeViewColumn و الحاق آن به TreeView دنبال می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
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 زیر به عنوان خروجی نمایش داده می شود –
لیست جلسات قبل آموزش PyGTK
- آموزش PyGTK
- معرفی PyGTK
- آموزش محیط PyGTK
- آموزش Hello World در PyGTK
- آموزش کلاس های مهم در PyGTK
- آموزش کلاس پنجره در PyGTK
- آموزش کلاس دکمه در PyGTK
- آموزش کلاس لیبل در PyGTK
- آموزش کلاس ورود در PyGTK
- آموزش مدیریت سیگنال در PyGTK
- آموزش مدیریت رویداد در PyGTK
- آموزش کانتینر در PyGTK
- آموزش کلاس جعبه در PyGTK
- آموزش کلاس ButtonBox در PyGTK
- آموزش کلاس تراز در PyGTK
- آموزش کلاس EventBox در PyGTK
- آموزش کلاس Layout در PyGTK
- آموزش کلاس ComboBox در PyGTK
- آموزش کلاس ToggleButton در PyGTK
- آموزش کلاس CheckButton در PyGTK
- آموزش کلاس RadioButton در PyGTK
- آموزش MenuBar ،Menu و MenuItem در PyGTK
- آموزش کلاس نوار ابزار در PyGTK
- آموزش کلاس Adjustment در PyGTK
- موزش کلاس Range در PyGTK
- آموزش کلاس Scale در PyGTK
- آموزش کلاس Scrollbar در PyGTK
- آموزش کلاس Dialog در PyGTK
- آموزش کلاس MessageDialog در PyGTK
- آموزش کلاس AboutDialog در PyGTK
- آموزش کلاس FontSelection در PyGTK
- آموزش کلاس Color Selection در PyGTK
- آموزش دیالوگ انتخاب فایل در PyGTK
- آموزش کلاس نوت بوک در PyGTK
- آموزش کلاس فریم در PyGTK
- آموزش کلاس AspectFrame در PyGTK
دیدگاه شما