Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
805
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.59 KB | None | 0 0
  1. import gi
  2. import sys
  3. import os
  4. gi.require_version('Gtk', '3.0')
  5. from gi.repository import Gtk, Gdk, GObject
  6.  
  7. class SimpleTreeview():
  8.  
  9.     def main(self):
  10.         self.lsFiles = Gtk.ListStore(GObject.TYPE_STRING)
  11.         self.refresh_data(self.lsFiles)
  12.         self.display_window()
  13.  
  14.     def refresh_data(self, liststore):
  15.         liststore.clear()
  16.         for r, d, f in os.walk("/home/user/tmp"):
  17.             for file in f:
  18.                 liststore.append([os.path.join(r, file)])
  19.  
  20.     def on_click_fileSelect(self, tree_view, path, column):
  21.         selection = tree_view.get_selection()
  22.         value = selection.get_selected_rows()
  23.         if value:
  24.             model, iter = value
  25.             ret = model.get_value(model.get_iter(iter[0]), 0)
  26.             if sys.platform.startswith('linux'):
  27.                 subprocess.Popen(['xdg-open', ret])
  28.  
  29.     def on_drag_data_get(self, treeview, context, selection, info, time):
  30.         data = []
  31.         treeselection = treeview.get_selection()
  32.         model, rows = treeselection.get_selected_rows()
  33.         for row in rows:
  34.             treeselection.select_path(row)
  35.             value = model[row][0]
  36.             data.append(value)
  37.         text = str(os.linesep).join(data)
  38.         selection.set_text(text, -1)
  39.         return True
  40.  
  41.  
  42.     def display_window(self):
  43.         self.win = Gtk.Window()
  44.         self.win.connect("destroy", Gtk.main_quit)
  45.         self.layout = Gtk.VBox()
  46.         self.win.add(self.layout)
  47.  
  48.         self.resultBox = Gtk.Box()
  49.  
  50.         self.fileSelect = Gtk.TreeView(model=self.lsFiles)
  51.         self.fileSelect.get_selection().set_mode(Gtk.SelectionMode.SINGLE)
  52.  
  53.         cell = Gtk.CellRendererText()
  54.         col = Gtk.TreeViewColumn("Filename", cell, text=0)
  55.         col.set_sort_column_id(0)
  56.         self.fileSelect.append_column(col)
  57.         scroll = Gtk.ScrolledWindow()
  58.         scroll.add(self.fileSelect)
  59.         self.fileSelect.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK,
  60.             [('text/plain', Gtk.TargetFlags.OTHER_APP, 0)], Gdk.DragAction.DEFAULT | Gdk.DragAction.COPY)
  61.         self.fileSelect.drag_source_add_text_targets()
  62.         self.fileSelect.connect('row_activated', self.on_click_fileSelect)
  63.         self.fileSelect.connect("drag-data-get", self.on_drag_data_get)
  64.         self.fileSelect.columns_autosize()
  65.         self.resultBox.pack_start(scroll, True, True, 0)
  66.  
  67.         self.layout.pack_start(self.resultBox, True, True, 0)
  68.         self.win.set_default_size(800, 600)
  69.         self.win.show_all()
  70.  
  71.         Gtk.main()
  72.  
  73.  
  74. if __name__ == "__main__":
  75.     SimpleTreeview().main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement