A
Andy Baxter
Hi,
I'm working on adding a Gtk GUI to a python program. Its main function
is to read raw data from an arduino board over USB, and convert it to
MIDI note/controller events to be sent to another program. I've had it
working fine with just a command line interface, but when I replaced the
command line with a Gtk interface, I started having problems getting the
thread that reads the USB port to run.
I'm not sure what the custom is on this list for pasting code - It's a
long program so I don't want to paste the whole thing.
The sequence of events I've coded is:
- the program starts.
- the port reader thread (which is a threading.Thread subclass) is
initialised.
- the object which controls the interface is initialised (i.e. the glade
file is loaded.)
- the port reader is started (i.e. the 'start' method is called, which
calls the 'run' method in a thread).
- then the gtk main loop is run.
The behaviour I'm getting is that the port reader either fails to start,
or stops running at the point where it tries to initialise the serial
port. It then does nothing until I close the main window, at which point
it starts running again.
The port reader's run method begins like this:
# the method called by the thread superclass to run the main loop of
the thread.
def run(self):
# main loop of thread.
print "Starting port reader."
fhan=serial.Serial(port=keeper.config['usbPort'],
baudrate=keeper.config['usbBaud'], timeout=0.1)
print "1"
fhan.open()
print "2"
seq=PySeq() # the sequencer library object
port=seq.createOutPort(keeper.config['midiPortName']) # make a
midi out port.
midich=keeper.config['midich']
print "3"
while True:
inbuf=[]
print ".",
char=fhan.read(1)
if self.quit:
fhan.close()
return
if len(char)==0: continue
... (code to process the character read in)
('keeper' is a global object which stores the config data and references
to a few key objects).
When you start the program, the thread stops either before the first
print statement, or on the line which initialises the serial port (
fhan=serial.Serial(...) ). '1', '2', and '3' only get printed /after/
you close the gtk main window.
Can anyone help with this?
cheers,
andy baxter
I'm working on adding a Gtk GUI to a python program. Its main function
is to read raw data from an arduino board over USB, and convert it to
MIDI note/controller events to be sent to another program. I've had it
working fine with just a command line interface, but when I replaced the
command line with a Gtk interface, I started having problems getting the
thread that reads the USB port to run.
I'm not sure what the custom is on this list for pasting code - It's a
long program so I don't want to paste the whole thing.
The sequence of events I've coded is:
- the program starts.
- the port reader thread (which is a threading.Thread subclass) is
initialised.
- the object which controls the interface is initialised (i.e. the glade
file is loaded.)
- the port reader is started (i.e. the 'start' method is called, which
calls the 'run' method in a thread).
- then the gtk main loop is run.
The behaviour I'm getting is that the port reader either fails to start,
or stops running at the point where it tries to initialise the serial
port. It then does nothing until I close the main window, at which point
it starts running again.
The port reader's run method begins like this:
# the method called by the thread superclass to run the main loop of
the thread.
def run(self):
# main loop of thread.
print "Starting port reader."
fhan=serial.Serial(port=keeper.config['usbPort'],
baudrate=keeper.config['usbBaud'], timeout=0.1)
print "1"
fhan.open()
print "2"
seq=PySeq() # the sequencer library object
port=seq.createOutPort(keeper.config['midiPortName']) # make a
midi out port.
midich=keeper.config['midich']
print "3"
while True:
inbuf=[]
print ".",
char=fhan.read(1)
if self.quit:
fhan.close()
return
if len(char)==0: continue
... (code to process the character read in)
('keeper' is a global object which stores the config data and references
to a few key objects).
When you start the program, the thread stops either before the first
print statement, or on the line which initialises the serial port (
fhan=serial.Serial(...) ). '1', '2', and '3' only get printed /after/
you close the gtk main window.
Can anyone help with this?
cheers,
andy baxter