Naihong Tang wrote on 2010-11-23 17:27: > Thank you, Ian. > > OnButtonPressed is Button's on_press callback, Run is MainLoop's run() > method, sorry for inaccurate expression. > The RAID building including a sequence of commands. Some commands are > synchronized, I mean the command will run until the operation finished. > Other commands are unsynchronized, after send the command, it will > finish immediately, polling is needed to get the status and result. I > have already done this part with pexpect module. Now I want to integrate > it with urwid, so the user can adjust some system parameters at > beginning. Seems start a thread will be the right choice. > I have another question, can the working thread call urwid to update the > GUI interface, or only the main thread can do it.
You should only use the main thread to update the UI, or both threads might try to update it simultaneously with poor results. The solution is to use a pipe that you write to from in the worker thread (or process) and pass the read end to loop.event_loop.watch_file() in the main thread (or process). The function you pass to watch_file will be called any time the pipe is readable, so you empty the pipe, update your UI and call loop.draw_screen() This question comes up enough that I should write a good example to point people to. I'll post to the list when that happens. Ian _______________________________________________ Urwid mailing list [email protected] http://lists.excess.org/mailman/listinfo/urwid
