[Python] gui e seriale in contemporanea
Perini Matteo
perini.matteo a gmail.com
Mar 5 Ago 2014 14:53:12 CEST
Il 04/08/2014 18:18, Marco Giusti ha scritto:
> Questo fa' sė che non appena il main loop non ha pių niente da fare,
> chiama la funzione "do_something_with_the_line".
Ciao
grazie del suggerimento.
Sto provando in vari modi ma la situazione migliore che ho ottenuto č
quella del codice sotto:
Funziona (stampa la riga che arriva dalla seriale) se continuo a far
fare qualcosa alla GUI altrimenti no.
Ho provato a forzare con cose tipo:
while gtk.events_pending():
gtk.main_iteration()
Ma non ho ottenuto miglioramenti.
Avete suggerimenti?
import gtk
import sys
import threading
import serial
#import gtk.glade
import glib
class Window:
def __init__(self):
builder = gtk.Builder()
builder.add_from_file("gui.glade")
self.win = builder.get_object("win")
self.win.connect("destroy", self.exit)
self.ssbutton=builder.get_object('ssbutton')
self.ssbutton.connect('clicked',self.on_ssbutton_clicked)
self.text=builder.get_object('testo')
self.text.set_text("CIAO")
self.title=builder.get_object('title')
self.title.set_text("test")
self.win.show_all()
def main(self):
gtk.main()
def exit(self,widget,data=None):
print 'quit'
gtk.main_quit()
sys.exit()
def on_ssbutton_clicked(self,event):
print str(self.ssbutton.get_active())
class Thread1 (threading.Thread):
def __init__(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
def run(self):
win = Window()
win.main()
class Thread2 (threading.Thread):
def __init__(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
def stampa(self,riga):
print riga
def run(self):
self.ser=serial.Serial("/dev/ttyACM0",9600)
while True:
self.a=self.ser.readline()
if self.a!="":
glib.idle_add(self.stampa, self.a)
while gtk.events_pending():
gtk.main_iteration()
thread1 = Thread1(1, "GUI")
thread2 = Thread2(2, "Serial")
thread1.start()
thread2.start()
Grazie
Matteo P
Maggiori informazioni sulla lista
Python