[Python] Glade3 e statusbar

Marcello marcello a linuxvil.it
Dom 13 Ott 2013 17:53:23 CEST


> cmq i problemi rimarranno se blocchi il mainloop lanciando dei processi
esterni
> e questo mi fa pensare che ho ragione.

Si effettivamente il problema è proprio il blocco della mainloop.

Ho provato ad utilizzare Tread, ma ottengo lo stesso risultato

from threading import Thread
from gi.repository import Gtk
class Windows(object):

    def __init__(self):
        self.ApplicazioneGlade = Gtk.Builder()
        self.ApplicazioneGlade.add_from_file(PercorsoGlade)
        self.ApplicazioneGlade.connect_signals(self)
        self.statusbar = self.ApplicazioneGlade.get_object('statusbar')
        self.context_id = self.statusbar.get_context_id('statusbar')
        self.statusbar.push(self.context_id, 'Status . . . . . . . ')

    def run(self, *args):

        self.ApplicazioneGlade.get_object("FinestraPrincipale").show()
        self.model = Gtk.ListStore(str,str,str,str,str)
        elencoimpianti = self.ApplicazioneGlade.get_object('ElencoImpianti')
        elencoimpianti.get_selection().set_mode(Gtk.SelectionMode.SINGLE)
        col1,col2,col3,col4,col5 = range(5)
        elencoimpianti.set_model(self.model)
        cell = Gtk.CellRendererText()
        column2 = Gtk.TreeViewColumn("- Nome Impianto -", cell, text = col2)
        column2.set_resizable (True)
        column2.set_sort_column_id(col2)
        elencoimpianti.append_column (column2)
        column3 = Gtk.TreeViewColumn("- Codice Impianto -", cell, text =
col3)
        column3.set_resizable (True)
        column3.set_sort_column_id(col3)
        elencoimpianti.append_column (column3)
        column4 = Gtk.TreeViewColumn(" Pers ", cell, text = col4)
        column4.set_resizable (True)
        column4.set_sort_column_id(col4)
        elencoimpianti.append_column (column4)
        column5 = Gtk.TreeViewColumn(" -PBX- ", cell, text = col5)
        column5.set_resizable (True)
        column5.set_sort_column_id(col5)
        elencoimpianti.append_column (column5)
        datiDB =
pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DriverMDB,PercorsoMDB,PwdMDB))
        cur = datiDB.cursor()
        cur.execute("select
CapoImpianto,NomeImpianto,CodiceImpianto,NomeSW,TipoCentrale from Impianti
where Gestione = '"+gestione+"'")
        dati = cur.fetchall()
        for dato in dati:
            if str(dato[0]) == "None":
                var1= ''
            else:
                var1=str(dato[0])
            var2=str(dato[1])
            var3=str(dato[2])
            var4=str(dato[3])
            if str(dato[4]) == "None":
                var5= ''
            else:
                var5=str(dato[4])
            record = self.model.append([var1,var2,var3,var4,var5])
        cur.close()
        datiDB.close()
        Gtk.main()

    def on_statusbar_show(self, button,obj,data=None):
        self.statusbar = self.ApplicazioneGlade.get_object('statusbar')
        self.context_id = self.statusbar.get_context_id('statusbar')
        self.statusbar.push(self.context_id, self.MessaggioStatusbar)

    def on_VerTab_clicked(self, button):
        self.MessaggioStatusbar = 'Hai premuto Verifica Tabella'
        thread1 = Thread(target=self.on_statusbar_show(self,
button,data=None),args=[])
        thread1.start()
        thread1.join()

        thread2 = Thread(target=self.on_VerTab_clicked2(self),args=[])
        thread2.start()
        thread2.join()

    def on_VerTab_clicked2(self, button):
        ... codice che controlla parecchi file di testo ......
        ... insert INTO DB .........
Windows().run()



Posso risolvere questo problema facilmente senza stravolgere il programma?

Ciao
Marcello
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20131013/6095051d/attachment.html>


Maggiori informazioni sulla lista Python