Advertisement
Guest User

Untitled

a guest
May 20th, 2013
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.06 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #-*- coding: utf-8 -*-
  3.  
  4. import pygtk
  5. pygtk.require('2.0')
  6. import gtk
  7. import codecs, csv
  8.  
  9. class TreeModelFilter:
  10.  
  11.     # close the window and quit
  12.     def delete_event(self, widget, event, data=None):
  13.         gtk.main_quit()
  14.         return False
  15.  
  16.     def __init__(self):
  17.         # Create a new window
  18.         self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  19.         self.window.set_position(gtk.WIN_POS_CENTER)
  20.         self.window.set_title("TreeModelFilter Example")
  21.         self.window.set_size_request(600, 600)
  22.         self.window.connect("delete_event", self.delete_event)
  23.  
  24.         # create a liststore with one string column to use as the model
  25.         self.liststore = gtk.ListStore(int, str, str, str, str, str, str)
  26.  
  27.         self.modelfilter = self.liststore.filter_new()
  28.  
  29.         # create the TreeView
  30.         self.treeview = gtk.TreeView()
  31.  
  32.         # create the TreeViewColumns to display the data
  33.         self.treeview.columns = [None]*7
  34.         self.treeview.columns[0] = gtk.TreeViewColumn('Nr.')
  35.         self.treeview.columns[1] = gtk.TreeViewColumn('Name')
  36.         self.treeview.columns[2] = gtk.TreeViewColumn('Date')
  37.         self.treeview.columns[3] = gtk.TreeViewColumn('City')
  38.         self.treeview.columns[4] = gtk.TreeViewColumn('Shipment')
  39.         self.treeview.columns[5] = gtk.TreeViewColumn('Street')
  40.         self.treeview.columns[6] = gtk.TreeViewColumn('Street Nr.')
  41.  
  42.         #Lese CSV File
  43.         count = 1
  44.         for zeile in self.read_csv_file():
  45.         #passt das eigentlich mit dem decode/encode oder reicht nur decode?
  46.             self.liststore.append(
  47.                 [count,
  48.                 zeile["Receiver Company Name"].decode('latin-1').encode('utf-8') ,
  49.                 zeile["Shipment Date"].decode('latin-1').encode('utf-8'),
  50.                 zeile["Receiver City Name"].decode('latin-1').encode('utf-8'),
  51.                 zeile["Shipment nr."].decode('latin-1').encode('utf-8'),
  52.                 zeile["Receiver Street Name"].decode('latin-1').encode('utf-8'),
  53.                 zeile["Receiver Street Number"].decode('latin-1').encode('utf-8')
  54.                 ])
  55.             count += 1
  56.  
  57.        
  58.         self.treeview.set_model(self.modelfilter)
  59.  
  60.         # Füge die spalten zus Sicht hinzu
  61.         for n in range(7):
  62.             # add columns to treeview
  63.             self.treeview.append_column(self.treeview.columns[n])
  64.             # create a CellRenderers to render the data
  65.             self.treeview.columns[n].cell = gtk.CellRendererText()
  66.             self.treeview.columns[n].cell.set_property("editable", True)
  67.             # add the cells to the columns
  68.             self.treeview.columns[n].pack_start(self.treeview.columns[n].cell, True)
  69.             # set the cell attributes to the appropriate liststore column
  70.             self.treeview.columns[n].set_attributes(
  71.                 self.treeview.columns[n].cell, text=n)
  72.  
  73.         # make treeview searchable
  74.         # bin ich mir jetzt gar nicht sicher ob ich das überhaupt brauche
  75.         self.treeview.set_search_column(3)
  76.  
  77.         # make layout
  78.         self.vbox = gtk.VBox()
  79.         self.scrolledwindow = gtk.ScrolledWindow()
  80.         self.bbox = gtk.HButtonBox()
  81.         self.vbox.pack_start(self.scrolledwindow)
  82.         self.vbox.pack_start(self.bbox, False)
  83.        
  84.         # add a namesearch entry
  85.         self.search_name_entry = gtk.Entry()
  86.         self.search_name_entry.connect("changed", self.search_name_entry_changed)
  87.         self.bbox.pack_start(self.search_name_entry)
  88.  
  89.         # create start search button
  90.         sbutton = gtk.Button("Search")
  91.         self.bbox.pack_start(sbutton)
  92.         sbutton.connect('clicked', self.search_button)
  93.  
  94.         # füge boxen zu Fenster hinzu und zeige alles
  95.         self.scrolledwindow.add(self.treeview)
  96.         self.window.add(self.vbox)
  97.      
  98.         # make filter
  99.         self.modelfilter.set_visible_func(self.search_name, self.search_name_entry.get_text())        
  100.      
  101.         self.window.show_all()
  102.        
  103.         return
  104.  
  105.     # ist suchbegriff in erster zeile vorhanden?
  106.     # data ist leer
  107.     def search_name(self, model, iter, data):
  108.         print data
  109.         return model.get_value(iter, 1) in data
  110.  
  111.     # Bei Änderungen im Suchtext
  112.     def search_name_entry_changed(self, widget):
  113.         print "ändere Text"
  114.         return
  115.        
  116.     # Filter und Knöfe auf Wert/Inhalt checken und Filter anwenden
  117.     def search_button(self, widget):
  118.         for b in self.bbox.get_children():
  119.             if type(b) == gtk.Entry:
  120.                 if b.get_text():
  121.                     print "b.get_text()"
  122.                     print b.get_text()
  123.             else:
  124.                 print "type(b) ist kein Entry"
  125.  
  126.         self.modelfilter.refilter()
  127.         return
  128.  
  129.     #read csv file
  130.     def read_csv_file(self):
  131.         input_file = codecs.open("Shipments.txt", "rb")
  132.         csv_reader = csv.DictReader(input_file, delimiter=';')
  133.         return csv_reader        
  134.  
  135. def main():
  136.     gtk.main()
  137.  
  138. if __name__ == "__main__":
  139.     tmfexample = TreeModelFilter()
  140.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement