Ik ben niet echt bekend met wxPython, maar in het algemeen geldt dat
je time.sleep() moet vermijden in een GUI-programma. Alles staat dan
stil, en uit jou uitleg lijkt het erop dat in het geval van wxPython
onder Windows XP zelfs het opnieuw tekenen van het window niet gebeurt.
De gebruikelijke manier om iets op een later tijdstip te doen is om
aan de GUI-eventloop te vragen of-ie je over een paar seconden een
callback wil geven. Soms heeft dat de vorm van een event, dan zoek je
iets in de trant van mainloop.ScheduleApplicationDefinedEvent(3), en
wordt 3 seconden later je OnApplicationDefinedEvent() aangeroepen.
Soms geef je ook gewoon de routine die je aangeroepen wilt hebben
mee, dan zoek je iets als mainloop.ScheduleCalback(3,
self.myShowNextPicture) en wordt die myShowNextPicture later
aangeroepen. Hoe het in wxWindows werkt moet je zelf even in de
documentatie opzoeken.
Het grote voordeel hiervan is de gedurende die 3 seconden de user
interface nog gewoon actief is, dus als je user bijvoorbeeld "quit"
kiest stopt het programma ook meteen.
On 1-Dec-2007, at 20:47 , Ben Ansems de Vries wrote:
Beste mensen,
Ik ben betrekkelijk nieuw in Python en leer er iedere dag bij. Door
kleine programmaatjes te schrijven oefen ik met deze fantastisch taal.
Bij het volgende probleem kan ik wat hulp gebruiken:
Doel: Plaatje weergeven ====> pauze 3 sec. ======> Volgende
plaatje weergeven
Probleem: zodra invoer waar is dan staat het programma 3 sec stil
en daarna is alleen het tweede plaatje te zien m.a.w programma gaat
in sleep voordat het eerste plaatje is
weergegeven . Zie programma code.
Vraag: Waar gaat het mis? Is time.sleep(sec) hiervoor wel te
gebruiken?
Alvast bedankt,
Ben
Platform: Windows XP Media Center Edition
Program info:
Spe version 0.8.3.c
Python version 2.5.1
wxPython version 2.8.6.1.
wxglade Version 0.6.1
#--------------- Gedeelte van de code-----------------
def OnText(self, event): # wxGlade: MyFrame1.<event_handler>
self.text_ctrl_1.SetMaxLength(1)
invoer = self.text_ctrl_1.GetValue()
letter = MyFrame1.letter
if invoer == letter:
self.label_2.SetLabel(letter)
self.text_ctrl_1.Hide()
#eerste plaatje weergeven
MyFrame1.Showbitmap(self,"smile.jpg")
print "Debug: plaatje is geactiveerd"
#wacht 3 seconden
time.sleep(3)
# laad het volgende plaatje
MyFrame1.Showbitmap(self,"smile_surprised.jpg")
elif invoer =="":
print "invoer leeg"
else:
MyFrame1.Showbitmap(self,"smile_surprised.jpg")
self.text_ctrl_1.SetValue("")
event.Skip()
def Showbitmap(self,bitmap):
i = wx.Image(bitmap,wx.BITMAP_TYPE_ANY)
b1 = wx.BitmapFromImage(i)
self.bitmap_1.SetBitmap(b1)
self.bitmap_1.Show()
_______________________________________________
Python-nl mailing list
Python-nl@python.org
http://mail.python.org/mailman/listinfo/python-nl
_______________________________________________
Python-nl mailing list
Python-nl@python.org
http://mail.python.org/mailman/listinfo/python-nl