On Tue, Aug 05, 2014 at 02:53:12PM +0200, Perini Matteo wrote:
> 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:
Dici di usare le gtk3 e non le usi. Ti suggerisco di usare idle_add e
non lo usi. Adesso ti allego un "canovaccio", vediamo se così va'
meglio.
m.
import time
import threading
# import serial
import gtk
import gobject
class Quit(Exception):
pass
class Gui:
def __init__(self, quit):
self.quit = quit
win = gtk.Window()
win.connect("destroy", lambda w: self.exit())
self.textbuffer = gtk.TextBuffer()
textview = gtk.TextView(self.textbuffer)
textview.set_editable(False)
sw = gtk.ScrolledWindow()
sw.add(textview)
win.add(sw)
win.set_default_size(300, 200)
win.show_all()
def exit(self):
self.quit.set()
gtk.main_quit()
def add_text(self, text):
enditer = self.textbuffer.get_end_iter()
self.textbuffer.insert(enditer, text)
class Thread2 (threading.Thread):
def __init__(self, name, gui, quit):
threading.Thread.__init__(self, name=name)
self.__gui = gui
self.__quit = quit
self.__lines = iter([
(0, "hello world\n"),
(1, "bonjour le monde\n"),
(2, "hallo Welt\n"),
(4, "ciao mondo\n"),
(8, "bye\n"),
])
def run(self):
while not self.__quit.is_set():
try:
line = self.readline()
gobject.idle_add(self.__gui.add_text, line)
except (EOFError, Quit):
break
def readline(self):
try:
timeout, line = next(self.__lines)
t = 0
while t < timeout and not self.__quit.is_set():
time.sleep(0.1)
t += 0.1
if self.__quit.is_set():
raise Quit()
return line
except StopIteration:
raise EOFError()
# def run(self):
# self.ser=serial.Serial("/dev/ttyACM0",9600)
# while True:
# self.a=self.ser.readline()
# if self.a!="":
# gobject.idle_add(self.stampa, self.a)
# while gtk.events_pending():
# gtk.main_iteration()
if __name__ == "__main__":
gobject.threads_init()
quit = threading.Event()
gui = Gui(quit)
t = Thread2("Serial", gui, quit)
t.start()
gtk.main()
_______________________________________________
Python mailing list
[email protected]
http://lists.python.it/mailman/listinfo/python