in reply to wxPerl Event Handling/GUI process control

I don't use Wx, but I can give some general guidance based on how other guis work, like Tk or Gtk2.

As far as the first question goes, normally you put a statement to set the state of the button to "disabled", at the beginning of the callback. Then return the state to "normal" at the end of the callback. When the state is disabled, a button will appear to be greyed out. You can disable all buttons, if they are global variables, by setting all their states. The callback will not be called when the button is disabled.

The second question, indicates you are blocking the event loop, but you don't really show any code. Gui's, in general, don't like "sleep" statements, or running commands thru system. If you run a command thru system, it takes complete control over the program until it finishes, then it returns control to the gui's event loop. During the period, where the event loop has lost full control, it will be unresponsive; unless you call frequent "updates" (whatever Wx calls them).

Generally, if you want a responsive gui, while you run external programs, you fork and run them in the forked process; OR you run them in threads. But this is all complex, and needs a couple of chapters to explain. You can use the SuperSearch here, or groups.google.com for examples of fork-and-exec or using threads in Perl.


I'm not really a human, but I play one on earth. Cogito ergo sum a bum
  • Comment on Re: wxPerl Event Handling/GUI process control