2010/3/18 Julián Alarcón <[email protected]>:
> 2010/3/18 Vermeersch Simon <[email protected]>:
>> 2010/3/18 Julián Alarcón <[email protected]>:
>>> Hi guys, I don't know if this is the right place to bother you with
>>> this support ask.
>>>
>>> I'm making a little app that takes data from PostgreSQL and show it on
>>> a TreeView. But, I need to update the data every 5 minutes, but I
>>> don't know how to make this. I tried some while loops but the window
>>> didn't appear.
>>>
>>> This is the code: http://paste.ubuntu.com/397321/
>>>
>>> And this is a little screenshot: http://i42.tinypic.com/14yaazs.jpg
>>>
>>> Thanks!
>>> _______________________________________________
>>> pygtk mailing list   [email protected]
>>> http://www.daa.com.au/mailman/listinfo/pygtk
>>> Read the PyGTK FAQ: http://faq.pygtk.org/
>>>
>>
>> You can use the gobject.timeout_add function to update your treeview.
>> Something like that:
>>
>> def __init__(self):
>>    ....
>>    gobject.timeout_add(300000, self.refresh_treeview)
>>
>> def refresh_treeview(self):
>>    #reload your data and refresh the treeview here
>>    return True
>>
>>
>> --
>> Simon Vermeersch
>>
> ################################
>
>
> Hi Simon, I just made some changes and add this:
>
>
>    def refresh_treeview(self):
>        try:
>                conexiondb = psycopg2.connect("dbname='databas' user='user'
> host='172.16.0.1' password='password'");
>                print "Conexion exitosa"
>        except:
>                print "No se pudo conectar a la base de datos"
>                gtk.main_quit()
>        cursor = conexiondb.cursor()
>        cursor.execute("SELECT * FROM datos_aplicacion")
>        consulta = cursor.fetchall()
>        datos = gtk.TreeStore(str,str,str,str,str,str,str,str,str,str)
>        for fila in consulta:
>                print fila[0], fila[1], fila[2], fila[3], fila[4], fila[5], 
> fila[6],
> fila[7], fila[8], fila[9]
>                datos.append(None,
> [fila[0],fila[1],fila[2],fila[3],fila[4],fila[5],fila[6],fila[7],fila[8],fila[9]])
>
>        self.treeview = gtk.TreeView(datos)
>        # create a CellRendererText to render the data
>        self.cell = gtk.CellRendererText()
>
>        # add the cell to the tvcolumn and allow it to expand
>        self.tvcolumna1.pack_start(self.cell, True)
>        self.tvcolumna2.pack_start(self.cell, True)
>        self.tvcolumna3.pack_start(self.cell, True)
>        self.tvcolumna4.pack_start(self.cell, True)
>        self.tvcolumna5.pack_start(self.cell, True)
>        self.tvcolumna6.pack_start(self.cell, True)
>        self.tvcolumna7.pack_start(self.cell, True)
>        self.tvcolumna8.pack_start(self.cell, True)
>        self.tvcolumna9.pack_start(self.cell, True)
>        self.tvcolumna10.pack_start(self.cell, True)
>
>        # set the cell "text" attribute to column 0 - retrieve text
>        # from that column in treestore
>        self.tvcolumna1.add_attribute(self.cell, 'text', 0)
>        self.tvcolumna2.add_attribute(self.cell, 'text', 1)
>        self.tvcolumna3.add_attribute(self.cell, 'text', 2)
>        self.tvcolumna4.add_attribute(self.cell, 'text', 3)
>        self.tvcolumna5.add_attribute(self.cell, 'text', 4)
>        self.tvcolumna6.add_attribute(self.cell, 'text', 5)
>        self.tvcolumna7.add_attribute(self.cell, 'text', 6)
>        self.tvcolumna8.add_attribute(self.cell, 'text', 7)
>        self.tvcolumna9.add_attribute(self.cell, 'text', 8)
>        self.tvcolumna10.add_attribute(self.cell, 'text', 9)
>
>        self.window.show_all()
>
>        return True
>
> ################################
>
>
> The output of my sql query is working, but the refresh of TreeView is
> not working, I just need that. Can you help me? Where is my mistake?
>
> Thanks for your help, my app is getting close to my wish :)
>

You shouldn't recreate your treeview in the refresh_treeview function
but keep that in your __init__.

Something like that:

def __init__(self):
    ....
       self.datos = gtk.TreeStore(str,str,str,str,str,str,str,str,str,str)
       self.treeview = gtk.TreeView(self.datos)
       # create a CellRendererText to render the data
       self.cell = gtk.CellRendererText()

       # add the cell to the tvcolumn and allow it to expand
       self.tvcolumna1.pack_start(self.cell, True)
       self.tvcolumna2.pack_start(self.cell, True)
       self.tvcolumna3.pack_start(self.cell, True)
       self.tvcolumna4.pack_start(self.cell, True)
       self.tvcolumna5.pack_start(self.cell, True)
       self.tvcolumna6.pack_start(self.cell, True)
       self.tvcolumna7.pack_start(self.cell, True)
       self.tvcolumna8.pack_start(self.cell, True)
       self.tvcolumna9.pack_start(self.cell, True)
       self.tvcolumna10.pack_start(self.cell, True)

       # set the cell "text" attribute to column 0 - retrieve text
       # from that column in treestore
       self.tvcolumna1.add_attribute(self.cell, 'text', 0)
       self.tvcolumna2.add_attribute(self.cell, 'text', 1)
       self.tvcolumna3.add_attribute(self.cell, 'text', 2)
       self.tvcolumna4.add_attribute(self.cell, 'text', 3)
       self.tvcolumna5.add_attribute(self.cell, 'text', 4)
       self.tvcolumna6.add_attribute(self.cell, 'text', 5)
       self.tvcolumna7.add_attribute(self.cell, 'text', 6)
       self.tvcolumna8.add_attribute(self.cell, 'text', 7)
       self.tvcolumna9.add_attribute(self.cell, 'text', 8)
       self.tvcolumna10.add_attribute(self.cell, 'text', 9)

       self.window.show_all()

def refresh_treeview(self):
       try:
               conexiondb = psycopg2.connect("dbname='databas' user='user'
host='172.16.0.1' password='password'");
               print "Conexion exitosa"
       except:
               print "No se pudo conectar a la base de datos"
               gtk.main_quit()
           self.datos.clear()
       cursor = conexiondb.cursor()
       cursor.execute("SELECT * FROM datos_aplicacion")
       consulta = cursor.fetchall()

       for fila in consulta:
               print fila[0], fila[1], fila[2], fila[3], fila[4],
fila[5], fila[6], fila[7], fila[8], fila[9]
               datos.append(None,
[fila[0],fila[1],fila[2],fila[3],fila[4],fila[5],fila[6],fila[7],fila[8],fila[9]])

Basically, you create your treeview and your liststore in the
__init__, and in the refresh_treeview you fill your liststore with
your data
-- 
Simon Vermeersch
_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

Reply via email to