How to write GUI and event separately in wxPython??

J

Jia Lu

HI all

I am making an application with wxpython.
But I got a problem when I want to change the display string
according to process status.

I passed the frame to the processing function and use the
frame.txtobj to change displaying strings.

I found it is a bad method to do that.
Can any one tell me how to do that usually?
( How to separate GUI and Control code? )

Thank you.
 
M

Marc 'BlackJack' Rintsch

I am making an application with wxpython.
But I got a problem when I want to change the display string
according to process status.

I passed the frame to the processing function and use the
frame.txtobj to change displaying strings.

I found it is a bad method to do that.
Can any one tell me how to do that usually?
( How to separate GUI and Control code? )

One possibility here is to give a callback function into the worker
function that gets called while the function does it's work. Simple
example:

def do_work(arguments, callback=lambda msg: None):
callback('Start processing.')
for percent in xrange(0, 101):
callback('finished %d%%...' % percent)
callback('Done.')

Ciao,
Marc 'BlackJack' Rintsch
 
S

Steve Holden

Marc said:
I am making an application with wxpython.
But I got a problem when I want to change the display string
according to process status.

I passed the frame to the processing function and use the
frame.txtobj to change displaying strings.

I found it is a bad method to do that.
Can any one tell me how to do that usually?
( How to separate GUI and Control code? )

One possibility here is to give a callback function into the worker
function that gets called while the function does it's work. Simple
example:

def do_work(arguments, callback=lambda msg: None):
callback('Start processing.')
for percent in xrange(0, 101):
callback('finished %d%%...' % percent)
callback('Done.')
>>> [x for x in xrange(0, 101)] == [y for y in xrange(101)] True
>>>

regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
--------------- Asciimercial ------------------
Get on the web: Blog, lens and tag the Internet
Many services currently offer free registration
----------- Thank You for Reading -------------
 
K

kyosohma

HI all

I am making an application with wxpython.
But I got a problem when I want to change the display string
according to process status.

I passed the frame to the processing function and use the
frame.txtobj to change displaying strings.

I found it is a bad method to do that.
Can any one tell me how to do that usually?
( How to separate GUI and Control code? )

Thank you.

If you're doing a long running task that needs to send data
periodically to the GUI front-end for status, there's some good ways
listed here: http://wiki.wxpython.org/LongRunningTasks

The wiki seems down right now (8:40 CST 07/30/2007), but hopefully
it'll be up soon.

Mike
 
S

Steve Holden

Marc said:
[x for x in xrange(0, 101)] == [y for y in xrange(101)]
True

First I thought: Why the unnecessary list comprehension but to my surprise:

In [33]: xrange(42) == xrange(42)
Out[33]: False

That's strange.
Not so strange really. The two xrange objects are different (though I
confess I haven't looked to see how they implement comparisons), but
iterating over them produces the same result.

regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
--------------- Asciimercial ------------------
Get on the web: Blog, lens and tag the Internet
Many services currently offer free registration
----------- Thank You for Reading -------------
 
C

Chris Mellon

Marc said:
[x for x in xrange(0, 101)] == [y for y in xrange(101)]
True

First I thought: Why the unnecessary list comprehension but to my surprise:

In [33]: xrange(42) == xrange(42)
Out[33]: False

That's strange.
Not so strange really. The two xrange objects are different (though I
confess I haven't looked to see how they implement comparisons), but
iterating over them produces the same result.


nitpick: list(xrange(42)) == list(xrange(42)) is slightly more concise
than the list comp..
 
S

Steve Holden

Chris said:
Marc said:
On Mon, 30 Jul 2007 06:32:55 -0400, Steve Holden wrote:

[x for x in xrange(0, 101)] == [y for y in xrange(101)]
True
First I thought: Why the unnecessary list comprehension but to my surprise:

In [33]: xrange(42) == xrange(42)
Out[33]: False

That's strange.
Not so strange really. The two xrange objects are different (though I
confess I haven't looked to see how they implement comparisons), but
iterating over them produces the same result.


nitpick: list(xrange(42)) == list(xrange(42)) is slightly more concise
than the list comp..

Indeed. I wonder if anyone will pick a nit with the nit you picked on my
nitpick ...

nitty-gritti-ly y'rs - steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
--------------- Asciimercial ------------------
Get on the web: Blog, lens and tag the Internet
Many services currently offer free registration
----------- Thank You for Reading -------------
 
M

Marc 'BlackJack' Rintsch

Marc said:
First I thought: Why the unnecessary list comprehension but to my surprise:

In [33]: xrange(42) == xrange(42)
Out[33]: False

That's strange.
Not so strange really. The two xrange objects are different (though I
confess I haven't looked to see how they implement comparisons), but
iterating over them produces the same result.

They are different objects, so are range(23) and another range(23) but
those compare equal. Somehow I expected two seemingly equal `xrange`
objects compare equal too.

Ciao,
Marc 'BlackJack' Rintsch
 
S

star.public

On Mon, 30 Jul 2007 06:32:55 -0400, Steve Holden wrote:
[x for x in xrange(0, 101)] == [y for y in xrange(101)]
True
nitpick: list(xrange(42)) == list(xrange(42)) is slightly more concise
than the list comp..

Not that it has anything to do with this topic anymore, but I find the
list comp a bit clearer for expressing the thought 'each element in
one is the same as the coresponding element in the other, or: the
sequences are identical' -- the list() version would proabably have
had me going 'huh?' even longer ^_^.
 
S

Steve Holden

On Mon, 30 Jul 2007 06:32:55 -0400, Steve Holden wrote:
[x for x in xrange(0, 101)] == [y for y in xrange(101)]
True
nitpick: list(xrange(42)) == list(xrange(42)) is slightly more concise
than the list comp..

Not that it has anything to do with this topic anymore, but I find the
list comp a bit clearer for expressing the thought 'each element in
one is the same as the coresponding element in the other, or: the
sequences are identical' -- the list() version would proabably have
had me going 'huh?' even longer ^_^.

Here's another one, a little more obscure still, but only valid in 2.5
because of all():

regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
--------------- Asciimercial ------------------
Get on the web: Blog, lens and tag the Internet
Many services currently offer free registration
----------- Thank You for Reading -------------
 
S

Steve Holden

On Mon, 30 Jul 2007 06:32:55 -0400, Steve Holden wrote:
[x for x in xrange(0, 101)] == [y for y in xrange(101)]
True
nitpick: list(xrange(42)) == list(xrange(42)) is slightly more concise
than the list comp..

Not that it has anything to do with this topic anymore, but I find the
list comp a bit clearer for expressing the thought 'each element in
one is the same as the coresponding element in the other, or: the
sequences are identical' -- the list() version would proabably have
had me going 'huh?' even longer ^_^.

Here's another one, a little more obscure still, but only valid in 2.5
because of all():

regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
--------------- Asciimercial ------------------
Get on the web: Blog, lens and tag the Internet
Many services currently offer free registration
----------- Thank You for Reading -------------
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,763
Messages
2,569,563
Members
45,039
Latest member
CasimiraVa

Latest Threads

Top