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()