A basic but critical problem in beginning of python code

When run a python script file, as we know main function will be run
first.
We send the class to a object “tb”,for instance. Then we have two ways
to
let the program run.
One is call tb.run() function,and other is call tb.start()
function.Could
somebody told me the difference bewteen these?

In my coding experience, use .run() the gui will display if you py file
is
modified by a grc file, but if use the .start() function, no gui display
even in same program.

run() is a blocking call.
start() is a non-blocking call.

Also, I believe run() will exit when a block returns -1 in its work
method. FYI

-Josh

So that is the reason for use .run() the gui will display if you py file
is
modified by a grc file, but if use the .start() function, no gui display
even in same program?

if it is ture,how can I add some logic after the program started?
I mean if I use start() function ,the code after start() could be
executed
(use run function these code could not be executed),but the GUI silde or
ratiobottom item which add to file by GRC previously could not be
displayed?

Is there anyway to have both GUI item and some logic after program could
be
available in same time?

2009/9/5 Josh B. [email protected]

In the wx gui code (generated by grc), the last line in the py file is
tb.Run(True). This effectively calls start() on the flow graph and
blocks in the wx main loop:

—from top_block_gui.py—
#start flow graph
if start: self.start()
#blocking main loop
self._app.MainLoop()

For a wxgui app, you have to block in MainLoop(). However…

A) One option is to make your own threading.Thread class and pass it an
instance of your top block. Your thread will run in the background while
the main thread blocks at MainLoop().

B) An even better idea would be to make your own grc block wrapper that
will invoke this thread. You dont need to have an actual gnuradio block
in this xml wrapper, any python code is possible. A great example is the
xmlrpc server block:
http://gnuradio.org/trac/browser/gnuradio/trunk/grc/blocks/xmlrpc_server.xml

With option A: this would require modifications to a generated py
file. If you generate the file again, you have to re-do the
modifications.

However, with option B: grc can generate the py file with your thread

  • custom logic. All the information is captured in the saved grc file,
    so you do not need to modify the “output py file”.

-Josh

Thanks for your help, I am just use the first way under your mentioned,
means I modified a generated py file, and I use start function instead
run(ture) function in the last line.
But, after this job,the items added in GRC before is not displayed
anymore.(I used a slider item to control the freq, after change run() to
start() in the last line, the slider is missing while executing)

2009/9/5 nansai hu [email protected]

Josh & others:

Thanks for your help, I am just use the first way under your mentioned,
means I modified a generated py file, and I use start function instead
run(ture) function in the last line.
But, after this job,the items added in GRC before is not displayed
anymore.(I used a slider item to control the freq, after change run() to
start() in the last line, the slider is missing while executing)

2009/9/5 Josh B. [email protected]