0
我是新來的Python,我想用pywebkitgtk
然後用另一個線程倒計時打開一個網頁(這裏是google.com),
當時間到了,將信號發送到網頁視圖,下載HTML作爲文件PyGTK與線程,gobject,從另一個線程發送信號?
有沒有辦法來打開gtk.main並在後臺線程倒計時網頁,然後將信號發送到圖形用戶界面,使界面做一些事情..
參考材料:
- Downloading a page’s content with python and WebKit
- using a separate thread to run code, two approaches for threads in PyGTK.
這裏是我的代碼,它不能運行,我想我不明白Python的Class
...
#!/usr/bin/env python
import sys, threading
import gtk, webkit
import time
import gobject
gobject.threads_init()
google = "http://www.google.com"
class WebView(webkit.WebView):
#return page's content
def get_html(self):
self.execute_script('oldtitle=document.title;document.title=document.documentElement.innerHTML;')
html = self.get_main_frame().get_title()
self.execute_script('document.title=oldtitle;')
return html
#wait 5 senconds and send a signal
class TimeSender(gobject.GObject, threading.Thread):
def __init__(self):
self.__gobject_init__()
threading.Thread.__init__(self)
def run(self):
print "sleep 5 seconds"
time.sleep(5)
self.emit("Sender_signal")
gobject.type_register(TimeSender)
gobject.signal_new("Sender_signal", TimeSender, gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,())
#PywebkitGTK, open google.com, receive signal
class Window(gtk.Window, gobject.GObject):
def __init__(self, time_sender, url):
self.__gobject_init__()
gtk.Window.__init__(self)
time_sender.connect('Sender_signal', self._finished_loading)
self._url = url
def open_page(self):
view = WebView()
view.get_html()
view.open(self._url)
self.add(view)
gtk.main()
#write html to file
def _finished_loading(self, view):
with open("pagehtml.html", 'w') as f:
f.write(view.get_html())
gtk.main_quit()
'''
def user_callback(object):
with open("pagehtml2.html", 'w') as f:
f.write(view.get_html())
gtk.main_quit()
'''
if __name__ == '__main__':
time_sender = TimeSender()
window = Window(time_sender, google)
#time_sender.connect("Sender_signal", user_callback)
time_sender.start()
window.open_page()
我得到了一個錯誤:
AttributeError: 'TimeSender' object has no attribute 'get_html'
我一直困惑了幾天......謝謝