Was bedeutet folgende Fehlermeldung bei 'YieldIfNeeded' ?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Hallöchen,
ist einem von euch vieleicht schon mal folgende Fehlermeldung begegnet? Kann damit nichts anfangen, aber sie taucht immer wieder auf, ohne dass ich weiß warum!?

Code: Alles auswählen

return _core_.YieldIfNeeded(*args)
PyAssertionError: C++ assertion "wxThread::IsMain()" failed at ..\..\src\msw\evtloop.cpp(244) in wxEventLoop::Dispatch(): only the main thread can process Windows messages
Grüße, Seven
Nikolas
User
Beiträge: 102
Registriert: Dienstag 25. Dezember 2007, 22:53
Wohnort: Freiburg im Breisgau

Wo taucht sie denn auf?
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Nikolas hat geschrieben:Wo taucht sie denn auf?
in einer While-Schleife:

Code: Alles auswählen

while pos0 > 0:
    if self.quitt: break
    wx.YieldIfNeeded()
    
    pos1 = self.source.find('lightbluetext8',pos0)    
    if 'abel' in self.source[pos1:pos1+40]:                 
        pos2 = self.source.find('abel',pos1,pos1+40)    
        pos3 = self.source.find(' ',pos2-2,pos2)            
        if pos3 > 0:
            pos4 = self.source.find('</td></tr>',pos2)   
            pos5 = self.source.find('">',pos4-17)            
            label = self.source[pos5+2:pos4]
    pos0 = pos1+1
auch nur sporadisch, deswegen komme ich nicht dahinter, was sie bedeutet.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

snakeseven hat geschrieben:

Code: Alles auswählen

while pos0 > 0:
    if self.quitt: break
    wx.YieldIfNeeded()
    
    pos1 = self.source.find('lightbluetext8',pos0)    
    ...
auch nur sporadisch, deswegen komme ich nicht dahinter, was sie bedeutet.
Hallo Seven!

Der Hinweis ist >>only the main thread can process Windows messages<<. Du arbeitest hier evt. in einem Thread, der nicht die Herrschaft über die GUI hat. Nimm ``wx.CallAfter`` um den Aufruf threadübergreifend zu verpacken.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Hi Gerold,
wieder mal ins Schwarze getroffen!

Code: Alles auswählen

wx.CallAfter(wx.YieldIfNeeded)

bringts

Gruß, Seven
Antworten