[Tutor] threading problem in GUI
nephish
nephish at xit.net
Tue Sep 6 21:06:36 CEST 2005
Pierre Barbier de Reuille wrote:
>nephish a écrit :
>
>
>>Pierre Barbier de Reuille wrote:
>>
>>[...]
>>ok, i am still having a little problem understanding.
>>tried it but i don't know if i have things set in the right order.
>>
>>
>>gtk.gdk.threads_init()
>># Here initialize what you want
>>[...]
>># Launch the Gtk loop
>>gtk.gdk.threads_enter() # Unneeded if you don't want to call GUI
>> # functions from other threads
>>gtk.main()
>>gtk.gdk.threads_leave() # Needed only with threads_enter
>>
>>at the part where you wrote # Here initialize what you want
>>[...]
>>is that where i define the function that will run the thread?
>>
>>i get the part about having the enter and leave
>>i just seem to have a hang up (so to speak) with where the function gets
>>defined.
>>do i need to build it as a class like the example in the link you sent?
>>
>>
>
>Well, no you don't need to create a class.
>
>As for the place where to put your function, it's not a problem, [...]
>is the place where you will *execute* some initialization code (if
>needed) before you launch your interface. That's all (typically that's
>where you will instanciate your widgets).
>
>
>
>>thanks for your help on this
>>
>>
>>
>Your welcome,
>
>Pierre
>
>
>
ok, i am still kinda stuck.
im posting what i think is necessary, because the whole thing is rather
long.
so here goes.
#!/usr/bin/python
import os
import time
from time import strftime
import sys
import gtk
import pygtk
import serial
import threading
from threading import Thread
import tokenize
import gtk.glade
import weakref
import inspect
import re
gtk.gdk.threads_init()
def main(self):
gtk.gdk.threads_enter()
gtk.main()
gtk.gdk.threads_leave()
def on_StartEnginesButton_clicked(self, widget, *args):
print "on_StartEnginesButton_clicked called with self.%s" %
widget.get_name()
Input1Iter = self.Input1Buffer.get_end_iter()
Input2Iter = self.Input2Buffer.get_end_iter()
Input1Data = 'Reading Serial device ttyS14 \n'
Input2Data = 'Reading Serial device ttys15 \n'
self.Input1Buffer.insert(Input1Iter, Input1Data)
self.Input2Buffer.insert(Input2Iter, Input2Data)
time.sleep(2)
def Serial1():
print 'running serial 1'
ser = serial.Serial('/dev/ttyS15', 2400, timeout=None)
loopy = 1
i = 1
while loopy < 5:
for x in range(5):
i = i + 1
a = ser.read(1)#read one byte
a = ord(a) # change byte to integer
if (a < 64 )or (a > 127):
break
b = ser.read(1)
b = ord(b)
if (b < 64 )or (b > 127):
break
c = ser.read(1)
c = ord(c)
if c < 92:
break
d = ser.read(1)
d = ord(d)
if d < 128:
break
Sensor_ID = (a & 63) + (b & 63) * 64 + (c & 1) * 4096
Status = (c & 62) / 2 + (d & 63) * 32
c = int(c)
d = int(d)
x_Now = strftime('%Y-%m-%d %H:%M:%S')
gtk.threads_enter()
Input1Data =
str(Sensor_ID)+'\t'+str(Status)+'\t--------->\t'+x_Now+'\n'
Input1Iter = self.Input1Buffer.get_end_iter()
self.Input1Buffer.insert(Input1Iter, Input1Data)
gtk.threads_leave()
f = open('/home/piv/PivData/tmp/Serial/'+str(i), 'w')
f.write(str(Sensor_ID)+'\n'+str(c)+'\n'+str(d)+'\n'+str(Status)+'\n'+x_Now)
f.close()
Thread.start(Serial1())
thanks, i am learning from several sources. two books from O'Reilly, and
a dozen or so websites,
not everybody does everything the same way . if something here looks
alarming, please let me know.
thanks
More information about the Tutor
mailing list