muss ich wirklich threading benutzen? :(

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Nebelhom
User
Beiträge: 155
Registriert: Mittwoch 19. Mai 2010, 01:31

Hi,

ich schon wieder (sorry).

durch eure hilfe bin ich bei meinem kleinen applet schon relativ weit. Jetzt will ich folgendes bewerkstelligen:

Ich habe ein object fuer das gui und ein object fuer eine audiodatei. via dem gui kann ich auf knopfdruck die datei abspielen und stoppen usw.

Jetzt wuerde ich gerne mit einer funktion regelmaessig nachschauen lassen, ob die datei fertig gespielt hat, so dass ich mit einer anderen funktion einen neuen audiodateipfad angeben kann, um ein weiteres lied zu spielen.

Wie nicht anders zu erwarten, wenn ich diese funktion, in meinem fall:

Code: Alles auswählen

while song.playing: # boolean value
    time.sleep(0.01)

change_path_function(args) # changes path and thus file to be played
song.play()
im gui selber reinschreibe, dann friert mir alles ein. Dasselbe passiert, wenn ich es versuche "auszulagern" in andere objekte, aber weil es im endeffekt immer im mainloop gerufen wirdm friert die gui fuer die laenge des songs ein.

Nach laengerem rumsuchen im forum und durch google, scheinen alle mit threading und wx.CallAfter anfangen zu wollen. ist das hier auch unbedingt notwendig? nach 3 tagen rumprobieren (und keinen wirklich guten ansatz findend trotz vorhandener, guter beispiele) wuerde ich gerne hoeren ( :roll: ): nee muss nicht sein, dass macht man ganz einfach mit <tipp insert loesungsweg XYZ>.

Irgendein tipp, um im richtigen modul nachzuschauen wuerde schon langen... bzw wenn ihr mir sagt dass "unbedingt" threading sein muss, dann werde ich mir das *sigh* wirklich nochmal antun.

Danke schon fuer eure vorschlaege, antworten, feedback etc.

Nebs
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Hallo,

ich kenne mich eigentlich nur mit pyGTK aus - dort gibt es gobject.timeout_add(). Also habe ich einfach mal danach und dem Stichwort "wxpython" gegoogelt und bin auf wxtimer gestoßen. Das scheint genau das zu sein, was du suchst.

Damit benötigst du also keine Threads.

Schönen Gruß,

brb
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Es gibt eine wx.Timer Klasse, die genau das macht, was du suchst.

Code: Alles auswählen

        self.t = wx.Timer(self)
        self.t.Start(100)

        self.Bind(wx.EVT_TIMER, self.on_timer)

    def on_timer(self, evt)
        print 'nach 100ms'
the more they change the more they stay the same
Nebelhom
User
Beiträge: 155
Registriert: Mittwoch 19. Mai 2010, 01:31

Hey cool! So haette ich die wx.Timer Klasse nie ausgelegt (selbst wenn ich davon gewusst haette). Klappt hervorragend, das ganze.

Danke Euch beiden fuer die prompte Hilfe! Den code lass ich ;al weg, weil Dav1d hat ja schon das geruest des ganzen angegeben. mein sieht nicht wirklich anders aus.
Antworten