wxPython update problem

Jason Smith jhs_bkk at nospam.yahoo.com
Mon Apr 7 18:22:38 CEST 2003

Nils Grimsmo wrote:

> run() is called when you push the button. run() sets the label for the
> button every second for four seconds, but the button label is not updated
> before you return from run().

Disclaimer:  I'm a week-old Python programmer from a long Perl background.

Maybe you should forego time.sleep() in an interactive GUI program? 
Sleeping is asking the kernel to knock your program completely out.  You
don't want to be sleeping when a user tries to click a button, after all! 
Although I'm new to GUI programming.

I had a similar problem (waiting for blocking I/O), and I used a wxPyTimer
to get control back to my program so at least the wxButton would pop back
up while the network talk ensued.  So that's what I used for your program. 
I have no idea if this is the right solution, however.  YMMV.

(Tested on Gentoo)

from wxPython.wx import *

class MainWindow(wxFrame):
    label  = ['foo', 'bar']
    button = None

    def __init__(self, parent, id, title):
        self.togcount = 0      # Counts the SetLabel calls

        wxFrame.__init__(self, parent, -4, title, size=(100,100))
        self.button = wxButton(self, 13, self.label[0])
        EVT_BUTTON(self, 13, self.run)

    # Controls the toggle function
    def run(self, event):
        self.timer = wxPyTimer(self.toggleButton)
        self.toggleButton()     # Gets the toggling going right now

    # Toggles the button
    def toggleButton(self):
        self.togcount += 1
        if self.togcount == 4:  # Done
            self.togcount = 0

        self.button.SetLabel(self.label[self.togcount % 2])

app = wxPyApp()
frame = MainWindow(None, -1, 'Hello, World')

----== Posted via Newsfeed.Com - Unlimited-Uncensored-Secure Usenet News==----
http://www.newsfeed.com The #1 Newsgroup Service in the World! >100,000 Newsgroups
---= 19 East/West-Coast Specialized Servers - Total Privacy via Encryption =---

More information about the Python-list mailing list