Stránka: 1 z 1
| [ Príspevkov: 5 ] | |
Autor | Správa |
---|
Registrovaný: 30.07.11 Prihlásený: 30.07.11 Príspevky: 3 Témy: 1 | 1 |
Ahoj!
Mám za úlohu urobiť informačnú obrazovku, ktorej súčasťou bude na spodnom okraji obrazovky bežiaci text.
Rozhodol som sa pre použitie GTK (hlavne pre parsovanie html značiek v gtk.Label.set_markup()).
Celý text mám v gtk.Label. Skúšal som ho posúvať pomocou vloženia do gtk.Fixed a potom fixed.move(...,0,0),fixed.move(...,-1,0),fixed.move(...,-2,0),.............
potom som skúšal použitím gtk.Viewport. Oba spôsoby zlyhali, text začalo sekať, keď programu došla fyzická pamäť (dôsledkom bežiaceho textu) a začal zapisovať do swap.
Máte prosím nejaké iné riešenie? V pythone a s použitím GTK programujem asi iba týždeň, nič iné ma nenapadá. Za každú radu budem vdačný!
|
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | 0 |
Netuším, ako pri posúvaní objektu mohla dôjsť pamäť (takže tam určite robíš niečo iné, ako píšeš).
Kód: #!/usr/bin/env python
import pygtk pygtk.require('2.0') import gtk import glib
class MainWindow(gtk.Window): def __init__(self): gtk.Window.__init__(self) self.set_title('Test') vbox = gtk.VBox() self.add(vbox) dummy = gtk.Label() vbox.pack_start(dummy, True, True)
self.label = gtk.Label() # na konci textu musi byt tolko medzier, aby ich sirka bola vacsia, ako je pocet bodov, # o ktore ten text posuvame (inak sa koniec textu nebude prekreslovat, teda ak # neprinutime viewport, aby sa prekresloval cely, to ale vykreslovanie spomali) self.label.set_markup('aaa bbb <b>ccc</b> ddd eee <big>fff</big> ggg hhh iii jjj <span color="red">kkk</span> lll mmm nnn ooo ppp qqq rrr ') self.label.set_alignment(0.0, 0.5) self.viewport = gtk.Viewport() self.viewport.add(self.label) vbox.pack_start(self.viewport, False, True) # cas prekreslovania v milisekundach (pri 50ms ide o 20fps) glib.timeout_add(50, self._position_update)
self.connect("destroy", gtk.main_quit) self.set_size_request(250, 150) self.show_all() def _position_update(self): # aktualna sirka okna window_width = self.allocation.width # sirka textu label_width = self.label.size_request()[0] viewport_ha = self.viewport.get_hadjustment()
if viewport_ha.value >= label_width: # ak sme uz viewport posunuli na koniec textu, presunieme viewport v podstate pred okno # tak dosiahneme, ze sa text pri opakovani zobrazi uplne vpravo (inak by skocil uplne dolava) viewport_ha.value = -window_width else: # ak viewport este nie je na konci textu, posunieme ho o dva body # tato hodnota, spolu s casovacom urcuju rychlost posunu # ak sa ma text posuvat rychlejsie, mozeme zmensit cas pri casovaci, to ale sposobi vyssie zatazenie CPU # ak tu ale bude prilis velka hodnota, text bude prilis "skakat" viewport_ha.value += 2
return True
MainWindow() gtk.main()
|
|
Registrovaný: 30.07.11 Prihlásený: 30.07.11 Príspevky: 3 Témy: 1 | 1 |
Vďaka za vyčerpávajúcu odpoveď!
presne tak som to riešil aj ja. Problém je v tom, že to je informačná obrazovka (fullHD) a text je oveľa väčší ako v tvojom príklade, tu je upravený príklad, ktorý po pár sekundách začne sekať (aspoň mne Intel Core2Duo 2Ghz, 2GB ram).
Preto ma zaujíma, či neexistuje efektívnejší spôsob posúvania, napríklad spraviť s widgetu Label po parsovaní HTML nejaký obrázok.....alebo iný spôsob.....
vďaka za tvoj čas....
(doplnil som zmenu veľkosti písma, oznacene komentarom #DOPLNENÉ!!!!!!!!!!!!!!!!!!!!)
Kód: #!/usr/bin/env python
import pygtk pygtk.require('2.0') import pango import gtk import glib
class MainWindow(gtk.Window): def __init__(self): gtk.Window.__init__(self) self.set_title('Test') vbox = gtk.VBox() self.add(vbox) dummy = gtk.Label() vbox.pack_start(dummy, True, True)
self.label = gtk.Label() # na konci textu musi byt tolko medzier, aby ich sirka bola vacsia, ako je pocet bodov, # o ktore ten text posuvame (inak sa koniec textu nebude prekreslovat, teda ak # neprinutime viewport, aby sa prekresloval cely, to ale vykreslovanie spomali) self.label.set_markup('aaa bbb <b>ccc</b> ddd eee <big>fff</big> ggg hhh iii jjj <span color="red">kkk</span> lll mmm nnn ooo ppp qqq rrr aaa bbb <b>ccc</b> ddd eee <big>fff</big> ggg hhh iii jjj <span color="red">kkk</span> lll mmm nnn ooo ppp qqq rrr ') #DOPLNENÉ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! self.label.modify_font(pango.FontDescription("Arial 150")) #/DOPLNENÉ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! self.label.set_alignment(0.0, 0.5) self.viewport = gtk.Viewport() self.viewport.add(self.label) vbox.pack_start(self.viewport, False, True) # cas prekreslovania v milisekundach (pri 50ms ide o 20fps) glib.timeout_add(50, self._position_update)
self.connect("destroy", gtk.main_quit) self.set_size_request(250, 150) self.show_all() def _position_update(self): # aktualna sirka okna window_width = self.allocation.width # sirka textu label_width = self.label.size_request()[0] viewport_ha = self.viewport.get_hadjustment()
if viewport_ha.value >= label_width: # ak sme uz viewport posunuli na koniec textu, presunieme viewport v podstate pred okno # tak dosiahneme, ze sa text pri opakovani zobrazi uplne vpravo (inak by skocil uplne dolava) viewport_ha.value = -window_width else: # ak viewport este nie je na konci textu, posunieme ho o dva body # tato hodnota, spolu s casovacom urcuju rychlost posunu # ak sa ma text posuvat rychlejsie, mozeme zmensit cas pri casovaci, to ale sposobi vyssie zatazenie CPU # ak tu ale bude prilis velka hodnota, text bude prilis "skakat" #ZMENENÉ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! viewport_ha.value += 5 #/ZMENENÉ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
return True
MainWindow() gtk.main()
|
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | 0 |
Zväčšil som to okno na šírku 5000 bodov a výšku 400 bodov a funguje mi to úplne normálne (aj na oveľa slabšom počítači, ako máš ty). Ak ti to teda naozaj nefunguje, možno máš staré knižnice Gtk+, Cairo...
V takom prípade ti asi nebude fungovať ani priamo Cairo, takže asi by si mohol vyskúšať Qt4 a rendrovanie pomocou OpenGL Prípadne by si mohol vyskúšať WebKit (bud nejaký prehliadač, alebo GtkWebKit, prípadne QtWebKit) a potom by si ro celé mohol robiť v javascripte.
|
|
Registrovaný: 30.07.11 Prihlásený: 30.07.11 Príspevky: 3 Témy: 1 | 1 | |
Stránka: 1 z 1
| [ Príspevkov: 5 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Webhosting a servery | 3 | 514 | 16.12.2017 11:30 bebebrumik | | v JavaScript, VBScript, Ajax | 0 | 1021 | 19.02.2009 0:20 dafo | | v Operačné systémy Unix a Linux | 6 | 614 | 14.03.2008 16:45 socket | | v PHP, ASP | 4 | 627 | 06.05.2010 15:41 Blackshadow | | v PHP, ASP | 4 | 4397 | 03.09.2010 0:14 el_fuego333 | | v JavaScript, VBScript, Ajax | 7 | 1013 | 22.12.2008 18:04 Tominator | | v Operačné systémy Microsoft | 1 | 330 | 17.01.2008 8:54 Intelman | | v Intel - Integrated Electronics | 7 | 2378 | 26.03.2008 14:27 wave | | v Perl, Python, Ruby, CGI | 12 | 891 | 02.07.2021 8:41 void | | v Perl, Python, Ruby, CGI | 1 | 742 | 19.12.2011 23:09 Ďuri | | v Perl, Python, Ruby, CGI | 12 | 700 | 12.11.2014 0:21 Misosvk | | v Ponuka práce | 0 | 630 | 31.05.2012 20:47 webwrx | | v Perl, Python, Ruby, CGI | 19 | 1285 | 12.07.2013 23:36 phodinux | | v Perl, Python, Ruby, CGI | 1 | 684 | 14.06.2013 21:35 reDo | | v Perl, Python, Ruby, CGI | 6 | 1068 | 02.07.2013 19:04 reDo | | v Perl, Python, Ruby, CGI | 0 | 464 | 22.08.2016 13:23 marian_r |
|