Super to je ono. Moc děkuji za radu. Dne Tue, 30 Jun 2009 13:05:17 +0200 Petr Messner <[email protected]> napsal(a):
> Ano, základem GUI v GTK (a i jinde) je smyčka - main event loop. > Mimochodem, tato smyčka se dá udělat i ručně, pomocí > gtk.events_pending() a gtk.main_iteration(block=True). > > To mě vlastně přivedlo na myšlenku, můžeš si nastavit pravidelné > volání nějakého kódu a v něm si tu hlasitost z Alsy zjišťovat - > glib.timeout_add(interval, callback, ...). To už vypadá elegantně. > Samozřejmě že ten volaný kód (callback) nesmí trvat moc dlouho, jinak > bude GUI zamrzávat. Toto řešení mě mělo napadnout hned... > > 2009/6/30 Filip Bartmann <[email protected]>: > > gtk.main() je co jsem prozatím ze zkoušení zjistil nekonečná smyčka > > a jakmile spustím gtk.main(), tak se už žádný další kód, který není > > vyvolán něcím v GUI nespustí, do ukončení gtk.main(). > > > > Proto to zkouším řešit přes podprocesy/vlákna. A kdybych to hlavního > > procesu dal monitorování roury, tak bych to zase musel mít ve while > > True, ne? > > > > Jde to v Pythonu řešit nějak elegantněji? > > > > Děkuji. > > > > Dne Tue, 30 Jun 2009 12:05:02 +0200 > > Petr Messner <[email protected]> napsal(a): > > > >> V půlce programu si to klidně forkneš a očekáváš, že z potomka si v > >> pohodě můžeš měnit proměnné v rodičkovském procesu, navíc z obou > >> procesů saháš do GTK? No fuj :-) GTK je myslím thread-safe (po > >> nějaké inicializaci, pokud si dobře vzpomínám), ale že by i > >> multiprocess-safe, to pochybuji :-) > >> > >> Doporučuji použít místo podprocesů vlákna nebo zařídit nějakou > >> meziprocesovou komunikaci - nejjednodušeji asi rouru/socketpair - > >> tak aby s GUI manipuloval jen jeden proces. > >> > >> PM > >> > >> 2009/6/30 Filip Bartmann <[email protected]>: > >> > V této části kódu: > >> > ---------------------------------------------------------------------------------- > >> > def __init__(self): > >> > self.mixer=alsa.Mixer(); > >> > if self.mixer.getmute()[0]==0: > >> > > >> > self.icon=gtk.status_icon_new_from_stock(gtk.STOCK_YES); > >> > else: > >> > > >> > self.icon=gtk.status_icon_new_from_stock(gtk.STOCK_NO); > >> > > >> > pid=os.fork(); > >> > if pid==0: > >> > while True: > >> > mixer=alsa.Mixer(); > >> > if mixer.getmute()[0]==0: > >> > print "UNMUTED"; > >> > > >> > self.icon.set_from_stock(gtk.STOCK_YES); > >> > elif mixer.getmute()[0]==1: > >> > print "MUTED"; > >> > > >> > self.icon.set_from_stock(gtk.STOCK_NO); > >> > time.sleep(1); > >> > > >> > self.icon.connect("popup-menu",self.show_controls); > >> > ---------------------------------------------------------------------------------- > >> > > >> > mám problém v přístupem k self.icon v potomkovi. Na CMDLině mi to > >> > sice správně hlási MUTED/UNMUTED ale ikona se nemění. Nevíte kde > >> > mám chybu? > >> > > >> > Za rady předem děkuji. > >> > > >> > Filip Bartmann > >> > _______________________________________________ > >> > Python mailing list > >> > [email protected] > >> > http://www.py.cz/mailman/listinfo/python > >> > > >> _______________________________________________ > >> Python mailing list > >> [email protected] > >> http://www.py.cz/mailman/listinfo/python > > _______________________________________________ > > Python mailing list > > [email protected] > > http://www.py.cz/mailman/listinfo/python > > > _______________________________________________ > Python mailing list > [email protected] > http://www.py.cz/mailman/listinfo/python _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
