2013-10-08 2 views
0

동일한 URL에서 새 프레임을 가져 오기 위해 Gtk.Image를 자동으로 새로 고치는 방법은 무엇입니까? 이미지 now.jpeg는 초당 1 프레임입니다. Python 스크립트를로드 할 때 업데이트 된 이미지가 아닌 첫 번째 프레임 만 표시합니다.Python - Gtk.Image를 새로 고침하여 동일한 URL에서 최신 이미지 프레임을 얻는 방법?

import os 
import urllib2 
from gi.repository import Gtk 
from gi.repository.GdkPixbuf import Pixbuf 

def quit_event(widget, event): 
    os.remove(imgname) 
    Gtk.main_quit() 

imgname = 'now.jpeg' 
url = 'http://192.168.1.11/'+imgname 

response = urllib2.urlopen(url) 
with open(imgname, 'wb') as img: 
    img.write(response.read()) 

image = Gtk.Image() 
pb = Pixbuf.new_from_file(imgname) 
image.set_from_pixbuf(pb) 

window = Gtk.Window() 
window.connect('delete-event', quit_event) 
window.add(image) 
window.show_all() 

Gtk.main() 

답변

2
import pygtk 
pygtk.require('2.0') 
import gtk 
import urllib2 

class MainWin: 
    def my_timer(self): 
     self.response=urllib2.urlopen(
      'http://192.168.1.11:7007/video/now.jpeg') 
     self.loader=gtk.gdk.PixbufLoader() 
     self.loader.write(self.response.read()) 
     self.loader.close() 
     self.image.set_from_pixbuf(self.loader.get_pixbuf()) 
     return True# do ur work here, but not for long 


    def destroy(self, widget, data=None): 
     print "destroy signal occurred" 
     gtk.main_quit() 

    def __init__(self): 
     self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     self.window.connect("destroy", self.destroy) 
     self.window.set_border_width(10) 
     self.image=gtk.Image() 



     gtk.timeout_add(1000, self.my_timer) # call every min 

     self.window.add(self.image) 
     self.image.show() 
     self.window.show() 

    def main(self): 
     gtk.main() 

if __name__ == "__main__": 
    MainWin().main() 
+0

이것은 * 구 * 파이썬 GTK 인터페이스입니다 - 새로운'gi.repository' 라이브러리, 그되지 GTK2 바인딩을 사용해야 GTK3 새로운 코드입니다. – NoBugs