ich bin gerade dabei mit Python, GTK, Webkit mir einen Browser zu basteln. Es läuft ganz gut, doch ich habe ein kleines Problem damit, Dateien runterzuladen.
Nach einigen Recherchen weiß ich, dass ich das das Signal download-requested verarbeiten muss, was ich so versucht habe:
Code: Alles auswählen
...        
    def __init__(self):
        self.web_view = webkit.WebView()
        self.web_view.connect('download-requested', self.download_requested)
...  
    def download_requested(view, download):
        name = download.get_suggested_filename()
        urlretrieve(download.get_uri(), '/home/malte/' + name)
        return False
        
 ...
Könnt ihr mir sagen wo vielleicht ich einen Denkfehler habe?
Falls es gebraucht wird hier der ganze Code:
Code: Alles auswählen
#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk
import webkit
import gobject
import yaml
import os
class Browser:
    
    with open(os.environ['HOME'] + "/.config/leaf/config.yml", 'r') as ymlfile:
        cfg = yaml.load(ymlfile)
    def delete_event(self, widget, event, data=None):
        return False
    def destroy(self, widget, data=None):
        gtk.main_quit()
    def download_requested(view, download):
        name = download.get_suggested_filename()
        urlretrieve(download.get_uri(), '/home/malte/' + name)
        return False
    def __init__(self):
        gobject.threads_init()
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_default_size(800, 600)
        self.window.set_resizable(True)
        self.window.set_title('Leaf Browser')
        self.window.set_icon_from_file('assets/leaf.png')
        self.window.connect("delete_event", self.delete_event)
        self.window.connect("destroy", self.destroy)
        self.web_view = webkit.WebView()
        self.web_view.connect('download-requested', self.download_requested)
        self.web_settings = webkit.WebSettings()
        self.web_settings.set_property('default-encoding', self.cfg['main']['default-encoding'])
        self.web_settings.set_property('user-agent', self.cfg['main']['user-agent'])
        self.web_settings.set_property('enable-private-browsing', self.cfg['security']['enable-private-browsing'])
        self.web_settings.set_property('enable-scripts', self.cfg['security']['javascript-enabled'])
        self.web_settings.set_property('enable-java-applet', self.cfg['security']['java-enabled'])
        self.web_settings.set_property('enable-display-of-insecure-content', self.cfg['security']['enable-display-of-insecure-content'])
        self.web_view.set_settings(self.web_settings)
        self.web_view.open(self.cfg['main']['homepage'])
        toolbar = gtk.Toolbar()
        self.back_button = gtk.ToolButton(gtk.STOCK_GO_BACK)
        self.back_button.connect("clicked", self.go_back)
        #same idea for forward button
        self.forward_button = gtk.ToolButton(gtk.STOCK_GO_FORWARD)
        self.forward_button.connect("clicked", self.go_forward)
        #again for refresh
        refresh_button = gtk.ToolButton(gtk.STOCK_REFRESH)
        refresh_button.connect("clicked", self.refresh)
        #add the buttons to the toolbar
        toolbar.add(self.back_button)
        toolbar.add(self.forward_button)
        toolbar.add(refresh_button)
        #entry bar for typing in and display URLs, when they type in a site
        #and hit enter the on_active function is called
        self.url_bar = gtk.Entry()
        self.url_bar.connect("activate", self.on_active)
        #anytime a site is loaded the update_buttons will be called
        self.web_view.connect("load_committed", self.update_buttons)
        scroll_window = gtk.ScrolledWindow(None, None)
        scroll_window.add(self.web_view)
        
        vbox = gtk.VBox(False, 0)
        vbox.pack_start(toolbar, False, True, 0)
        vbox.pack_start(self.url_bar, False, True, 0)
        vbox.add(scroll_window)
        self.window.add(vbox)
        self.window.show_all()
    def on_active(self, widge, data=None):
        url = self.url_bar.get_text()
        try:
            url.index("://")
        except:
            url = "http://"+url
        self.url_bar.set_text(url)
        self.web_view.open(url)
    def go_back(self, widget, data=None):
        self.web_view.go_back()
    def go_forward(self, widget, data=None):
        self.web_view.go_forward()
    def refresh(self, widget, data=None):
        self.web_view.reload()
    def update_buttons(self, widget, data=None):
        self.url_bar.set_text( widget.get_main_frame().get_uri() )
        self.back_button.set_sensitive(self.web_view.can_go_back())
        self.forward_button.set_sensitive(self.web_view.can_go_forward())
    def main(self):
        gtk.main()
if __name__ == "__main__":
    browser = Browser()
    browser.main()
