2015-07-19 5 views
0

Я пробовал много, и я продолжаю терпеть неудачу. Это будет очень легко для людей с графическим интерфейсом. Просьба привести несколько примеров или восстановление моего кода.Python GTK обновляет изображение в неподвижном контейнере (noob at GTK)

Я пытаюсь создать что-то похожее на Конки (теперь это не вариант). Полноэкранное окно для отображения информации, такой как текст и изображения на рабочем столе. Мне нужна помощь с скелетом скрипта gtk. Я хочу возможность отображать на диске несколько изображений (в произвольной позиции), которые обновляются каждые 10 минут, а также текст из файлов или команд.

сейчас у меня есть это:

#!/usr/bin/python 


import gtk 
import sys 
import cairo 



def transparent_expose(widget, event): 
    """ Make the given widget transparent. """ 
    cr = widget.window.cairo_create() 
    cr.set_operator(cairo.OPERATOR_CLEAR) 
    region = gtk.gdk.region_rectangle(event.area) 
    cr.region(region) 
    cr.fill() 
    return False 


class PyApp(gtk.Window): 

def __init__(self): 
    super(PyApp, self).__init__() 

    self.set_title("Fixed") 
    self.set_size_request(1300, 280) 
    self.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(6400, 6400, 6440)) 
    self.set_position(gtk.WIN_POS_CENTER) 

    screen = self.get_screen() 
    rgba = screen.get_rgba_colormap() 
    self.set_colormap(rgba) 
    self.set_app_paintable(True) 
    self.connect("expose-event", transparent_expose) 


def wetherchart(self): 
    try: 
     self.thessaloniki = gtk.gdk.pixbuf_new_from_file("/dev/shm/WEATHER/Thessaloniki.comb.png") 
    except Exception, e: 
     self.thessaloniki = gtk.gdk.pixbuf_new_from_file("/home/athan/LOGs/wait.svg") 

    try: 
     self.katerini = gtk.gdk.pixbuf_new_from_file("/dev/shm/WEATHER/Katerini.comb.png") 
    except Exception, e: 
     self.katerini = gtk.gdk.pixbuf_new_from_file("/home/athan/LOGs/wait.svg") 

    try: 
     self.florina = gtk.gdk.pixbuf_new_from_file("/dev/shm/WEATHER/Florina.comb.png") 
    except Exception, e: 
     self.florina = gtk.gdk.pixbuf_new_from_file("/home/athan/LOGs/wait.svg") 


    self.thessaloniki = self.thessaloniki.scale_simple(505,240,gtk.gdk.INTERP_BILINEAR) 
    self.katerini = self.katerini.scale_simple(505,240,gtk.gdk.INTERP_BILINEAR) 
    self.florina = self.florina.scale_simple(505,240,gtk.gdk.INTERP_BILINEAR) 

    image1 = gtk.Image() 
    image2 = gtk.Image() 
    image3 = gtk.Image() 

    image1.set_from_pixbuf(self.thessaloniki) 
    image2.set_from_pixbuf(self.katerini) 
    image3.set_from_pixbuf(self.florina) 

    fix = gtk.Fixed() 

    fix.put(image1, 515, 3) 
    fix.put(image2, 1025, 3) 
    fix.put(image3, 5, 3) 

    self.add(fix) 

    self.connect("destroy", gtk.main_quit) 
    self.show_all() 

PyApp() 
#gtk.main() 


def main(): 
    gtk.main() 
    return 0 

if __name__ == "__main__": 
    app = PyApp() 
    app.wetherchart() 


    #~ 
    #~ backups=Backups() 
    #~ gtk.timeout_add(15* 1000, backups.update) 
#~ 
    #~ calendar=Calendar() 
    #~ gtk.timeout_add(1 * 1000, calendar.update) 
#~ 
    #~ disks=Disks() 
    #~ gtk.timeout_add(5 * 60 * 1000 , disks.update) 
#~ 
    #~ events=Events() 
    #~ gtk.timeout_add(10 * 1000 , events.update) 
#~ 
    #~ process = Process() 
    #~ gtk.timeout_add(int(0.5 * 1000), process.update) 
#~ 
    #~ running = Running() 
    #~ gtk.timeout_add(60 * 1000, running.update) 
#~ 
    #~ temps = Temps() 
    #~ gtk.timeout_add(int(2 * 1000), temps.update) 
#~ 
    #~ transmision = Transmision() 
    #~ gtk.timeout_add(int(1 * 1000), transmision.update) 

    main() 

он работает нормально, но я не смог сделать его обновить изображения. Буду признателен за общее решение для размещения и обновления нескольких изображений и текстовых меток.

Спасибо за помощь!

+0

http://stackoverflow.com/questions/11819952/how-to-display-continuous-data-in-a-py-gtk-window – dsgdfg

+0

Я пробовал это, мне не удалось заставить его работать me –

+0

http://stackoverflow.com/questions/13938949/pygtk-how-to-update-gtk-обрать свою работу! я тестировал. надеюсь, полезный – dsgdfg

ответ

1

У меня не получилось, потому что я пропустил return True из функции обновления !!!

Вот рабочий пример

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 


import pygtk 
import gtk 
from datetime import datetime 

class Base: 

    def one(self): 
     try: 
      katerini = gtk.gdk.pixbuf_new_from_file("/dev/shm/WEATHER/Katerini.comb.png") 
     except Exception, e: 
      katerini = gtk.gdk.pixbuf_new_from_file("/home/athan/LOGs/wait.svg") 
     katerini = katerini.scale_simple(505,240,gtk.gdk.INTERP_BILINEAR) 

     self.image.set_from_pixbuf(katerini) 
     self.label.set_text(str(datetime.now())) 
     print "load" 
     print datetime.now() 
     return True 

    def tik(self): 
     self.label.set_text(str(datetime.now())) 
     return True 


    def __init__(self): 
     self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     #~ #self.window.fullscreen() 
     self.window.set_size_request(1300, 280) 

     self.image = gtk.Image() 
     self.label = gtk.Label() 
     self.label.set_text(str(datetime.now())) 

     fix = gtk.Fixed() 
     gtk.timeout_add(1000, self.one) 

     fix.put(self.image, 5, 3) 
     fix.put(self.label, 520, 3) 

     #self.window.add(self.image) 
     self.window.add(fix) 
     self.image.show() 
     self.window.show_all() 


    def main(self): 
     gtk.main() 

if __name__ == "__main__": 
    print "main" 
    Base().main() 
    gtk.timeout_add(10, Base.one) 

Спасибо за помощь!

Смежные вопросы