"Alex Hall" <mehg...@gmail.com> wrote
I had this working back in the summer, but have since had to
restructure some things in the code. Now, my program is hanging
while
it waits for the human player to take his/her turn, and I am not
sure
how to free it;
I don't really understand this concept in a GUI?
Why would you be waitying for the user?
Surely you should just go back to the mainloop
and let the GUI control the users input? Then
after processing that call the computer move code.
Something like:
def handle_user_move_event():
processMoveOnGUI()
movedata = generateComputerMove()
processMoveOnGUI()
return
Thats what I would expect to see.
while not self.grid.turnOver:
print("in while") #just a test to make sure I got this far
wx.Yield()
time.sleep(1)
#end while
So this is presumably buried in some very long and complex method
that you have written and you are briefly giving control back to
wxPython
before continuing your processing? Except that you appear to just
cycle continually giving back control? It doesn't seem to make sense.
some of them change the Grid's "turnOver" variable. Therefore, I
loop
until I see that the user performed an action on the grid that sets
the Grid's turnOver to true, at which point the loop stops and the
other user (a computer in this case) can go.
Why are you doing all this inside ane event handler? Why don't
you just make your move and hand back to the GUI?
The problem is that this loop makes the app hang,
with Windows saying it is not responding. Of
course, the user can now not do anything at all, so I have to use
ctrl-c from the cmd window where I launched it to kill it.
No idea why its doing that. Have you tried playing with the
Yield parameter and return value to see if they give a clue?
But frankly I'd look to reconstruct the code to avoid the use
of Yield completely. Yield should almost be a last resort...
time to call any Grid function. Is this solvable, or should I just
use
threads?
Based on the loop you posted you shouldn't need threads,
just exit your method and wait for the user to do something
and catch that event to restart your code. Leave it to the GUI.
HTH,
--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor