Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- #-*- coding: utf-8 -*-
- import pygtk
- pygtk.require('2.0')
- import gtk
- import codecs, csv
- class TreeModelFilter:
- # close the window and quit
- def delete_event(self, widget, event, data=None):
- gtk.main_quit()
- return False
- def __init__(self):
- # Create a new window
- self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
- self.window.set_position(gtk.WIN_POS_CENTER)
- self.window.set_title("TreeModelFilter Example")
- self.window.set_size_request(600, 600)
- self.window.connect("delete_event", self.delete_event)
- # create a liststore with one string column to use as the model
- self.liststore = gtk.ListStore(int, str, str, str, str, str, str)
- self.modelfilter = self.liststore.filter_new()
- # create the TreeView
- self.treeview = gtk.TreeView()
- # create the TreeViewColumns to display the data
- self.treeview.columns = [None]*7
- self.treeview.columns[0] = gtk.TreeViewColumn('Nr.')
- self.treeview.columns[1] = gtk.TreeViewColumn('Name')
- self.treeview.columns[2] = gtk.TreeViewColumn('Date')
- self.treeview.columns[3] = gtk.TreeViewColumn('City')
- self.treeview.columns[4] = gtk.TreeViewColumn('Shipment')
- self.treeview.columns[5] = gtk.TreeViewColumn('Street')
- self.treeview.columns[6] = gtk.TreeViewColumn('Street Nr.')
- #Lese CSV File
- count = 1
- for zeile in self.read_csv_file():
- #passt das eigentlich mit dem decode/encode oder reicht nur decode?
- self.liststore.append(
- [count,
- zeile["Receiver Company Name"].decode('latin-1').encode('utf-8') ,
- zeile["Shipment Date"].decode('latin-1').encode('utf-8'),
- zeile["Receiver City Name"].decode('latin-1').encode('utf-8'),
- zeile["Shipment nr."].decode('latin-1').encode('utf-8'),
- zeile["Receiver Street Name"].decode('latin-1').encode('utf-8'),
- zeile["Receiver Street Number"].decode('latin-1').encode('utf-8')
- ])
- count += 1
- self.treeview.set_model(self.modelfilter)
- # Füge die spalten zus Sicht hinzu
- for n in range(7):
- # add columns to treeview
- self.treeview.append_column(self.treeview.columns[n])
- # create a CellRenderers to render the data
- self.treeview.columns[n].cell = gtk.CellRendererText()
- self.treeview.columns[n].cell.set_property("editable", True)
- # add the cells to the columns
- self.treeview.columns[n].pack_start(self.treeview.columns[n].cell, True)
- # set the cell attributes to the appropriate liststore column
- self.treeview.columns[n].set_attributes(
- self.treeview.columns[n].cell, text=n)
- # make treeview searchable
- # bin ich mir jetzt gar nicht sicher ob ich das überhaupt brauche
- self.treeview.set_search_column(3)
- # make layout
- self.vbox = gtk.VBox()
- self.scrolledwindow = gtk.ScrolledWindow()
- self.bbox = gtk.HButtonBox()
- self.vbox.pack_start(self.scrolledwindow)
- self.vbox.pack_start(self.bbox, False)
- # add a namesearch entry
- self.search_name_entry = gtk.Entry()
- self.search_name_entry.connect("changed", self.search_name_entry_changed)
- self.bbox.pack_start(self.search_name_entry)
- # create start search button
- sbutton = gtk.Button("Search")
- self.bbox.pack_start(sbutton)
- sbutton.connect('clicked', self.search_button)
- # füge boxen zu Fenster hinzu und zeige alles
- self.scrolledwindow.add(self.treeview)
- self.window.add(self.vbox)
- # make filter
- self.modelfilter.set_visible_func(self.search_name, self.search_name_entry.get_text())
- self.window.show_all()
- return
- # ist suchbegriff in erster zeile vorhanden?
- # data ist leer
- def search_name(self, model, iter, data):
- print data
- return model.get_value(iter, 1) in data
- # Bei Änderungen im Suchtext
- def search_name_entry_changed(self, widget):
- print "ändere Text"
- return
- # Filter und Knöfe auf Wert/Inhalt checken und Filter anwenden
- def search_button(self, widget):
- for b in self.bbox.get_children():
- if type(b) == gtk.Entry:
- if b.get_text():
- print "b.get_text()"
- print b.get_text()
- else:
- print "type(b) ist kein Entry"
- self.modelfilter.refilter()
- return
- #read csv file
- def read_csv_file(self):
- input_file = codecs.open("Shipments.txt", "rb")
- csv_reader = csv.DictReader(input_file, delimiter=';')
- return csv_reader
- def main():
- gtk.main()
- if __name__ == "__main__":
- tmfexample = TreeModelFilter()
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement