[Python/(Py)GTK] Front-end (laadscherm) voor code

Pagina: 1
Acties:

  • GoneWacko
  • Registratie: September 2005
  • Laatst online: 20-02 13:25
Hallo :)

Ik ben bezig met een programma in Python waarbij ik een laadschermpje wil laten zien op het moment dat hij de benodigde bestanden in aan het laden is (bij het starten van het programma).
Hiervoor heb ik een heel simpel PyGTK windowtje gemaakt met een label (waarin staat welk bestand het programma aan het laden is) en een progressbar (waar ik de totale voortgang in wil tonen)

Nu wil ik natuurlijk mijn laad code draaien en ondertussen het windowtje updaten.
Alleen moet je gtk.main() aanroepen om de GTK+ event-handling loop te starten. Maar als die loop gestart is doet mn programmatje natuurlijk niks meer totdat die loop weer stopt.

Dus heb ik een simpele poging gedaan om het te multithreaden:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class LoadingWindowThread(threading.Thread):
    def run(self):
        LoadingWindow() # Een class waarin het windowtje gemaakt wordt en signals worden afgevangen
        gtk.main()

class LoadingThread(threading.Thread):
    def run(self):
        # een lap code waarin bestanden worden ingeladen

def main():
    loadingThread = LoadingThread()
    windowThread = LoadingWindowThread()
    windowThread.start()
    loadingThread.start()
    return 0

if __name__ == "__main__":
    main()
(de code is niet al te slim geschreven maar het was even een snelle test :Y))

Maar wat blijkt: gtk.main() locked alles (van wat ik heb begrepen) en die LoadingThread code doet niks totdat de GTK loop gestopt is. Oftewel, ik ben weer terug bij af
Threading is volgens deze pagina wel mogelijk maar relatief 'omslachtig'.

Dus nu vraag ik me af of er niet andere mogelijkheden zijn om 'achtergrond code' te draaien terwijl het GTK windowtje toch gewoon netjes zijn signalen afvangt, of anders of iemand misschien wat tips heeft wat betreft threading in combinatie met GTK.

Alvast bedankt voor enige hulp of tips :)

Verwijderd

Misschien heb je hier iets aan?
Deze vraag lijkt op die van jou
http://www.daa.com.au/pip...2002-November/003864.html
en een antwoord:
http://www.daa.com.au/pip...2002-November/003866.html

Hoewel dit de eerste google hit is bij "pygtk threading" dus die had je misschien zelf ook al gevonden :P

  • GoneWacko
  • Registratie: September 2005
  • Laatst online: 20-02 13:25
Hmm, ik heb gegoogled, APIs bekeken, alles, maar ik had gegoogled op 'gtk threading', niet 'pygtk threading'. :X (ik weet maar al te goed hoe vervelend het is om te simpele vragen gesteld te worden, dus ik doe altijd mijn best om ze niet zelf te stellen ;))

Nu doen beide threads wat ze moeten doen, alleen is mn windowtje nu wel erg unresponsive: De widgets verschijnen niet en ik moet het proces killen om er weer vanaf te komen. Maar het is zeker een stap in de juiste richting (en ik had al een vergelijkbaar probleem eerder, dus het zou me toch moeten lukken om het probleem op te lossen. Bedankt voor de tip :)

Edit: Met abatii's tip als 'stepping stone' heb ik dan nu eindelijk mijn windowtje aan de praat :).
Om me netjes te houden aan de guidelines voor het PRG forum zet ik er maar even bij hoe:deze entry op de PyGTK FAQ bleek erg veel hulp te bieden, vooral het commentaar wat bij de tweede methode staat :Y).

[ Voor 29% gewijzigd door GoneWacko op 17-04-2006 21:15 ]