Anyway, now there's a new problem. Part of my application executes a system command, captures the standard input/output/error pipes using "(stdin, stdout_err) = os.popen4(...)", and displays them to a Pmw TextDialog.
Now then, this system command may take a long time to execute, so I want the user to be able to abort the process if they decide it's taking too long or if they realize they made a mistake. In essence, the output dialog should function like a shell window, which means the user can press Ctrl-C to send an interrupt signal. I *THOUGHT* I could do that by adding an Abort button, which raises a KeyboardException. Here's the full code snippet:
########################################################################################
def SetupOutputDialog(self): self.outputDialog = Pmw.TextDialog(self.root, title="Output", text_state='disabled', buttons=('OK', 'Abort'), command=self.OutputButtonPress) ......
def OutputButtonPress(self, button): if button == 'OK': self.outputDialog.withdraw() elif button == 'Abort': raise KeyboardInterrupt
.....
(stdin, stdout_err) = os.popen4(compileString + " &") s = stdout_err.readline() while s != "": self.outputDialog.appendtext(s) self.outputDialog.update() s = stdout_err.readline()
########################################################################################
Seems perfectly sound, right? But for some reason, the Abort button doesn't seem to work right. When I press it, I get the following exception:
KeyboardInterrupt Exception in Tk callback
Function: <function <lambda> at 0x40ac9bc4> (type: <type 'function'>)
Args: ()
Traceback (innermost last):
File "/usr/lib/python2.3/site-packages/Pmw/Pmw_1_2/lib/PmwBase.py", line 1747, in __call__
return apply(self.func, args)
File "/usr/lib/python2.3/site-packages/Pmw/Pmw_1_2/lib/PmwDialog.py", line 153, in <lambda>
command=lambda self=self, name=name: self._doCommand(name))
File "/usr/lib/python2.3/site-packages/Pmw/Pmw_1_2/lib/PmwDialog.py", line 132, in _doCommand
return command(name)
File "/home/jmc/projects/tkfre/src/freMainGui.py", line 361, in OutputButtonPress
raise KeyboardInterrupt
KeyboardInterrupt:
That seems like the exception I was supposed to get.......but the process didn't stop!!! It detected the interrupt signal, but it didn't interrupt anything!
The wierd thing is, if I Alt-Tab back into the shell from which I started this application, and actually type Ctrl-C there, THEN it works. But I don't understand why raising the KeyboardInterrupt signal doesn't seem to do anything! Can anyone help please?
_______________________________________________
Tkinter-discuss mailing list
Tkinter-discuss@python.org
http://mail.python.org/mailman/listinfo/tkinter-discuss