Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Webbrowser.  (gelezen 859 keer)

Webbrowser.
« Gepost op: 2013/04/19, 14:14:29 »
Hallo,
ik ben bezig met het maken van een webbrowser in python, webkit, pygtk. Ik kom alleen ergens niet uit? Hoe zorg ik dat je tabladen kan toevoegen?
GreetZ WolfeZ
Mwanzo lid, Ik ben altijd bereid om je te helpen met alles. Onthou domme vragen bestaan niet, dus stel ze daar ben ik voor!

Re: Webbrowser.
« Reactie #1 Gepost op: 2013/04/19, 16:38:11 »
Die moet ge natuurlijk zelf toevoegen :-).

Kijk daarvoor naar de GtkNotebook widget. Maak voor elk nieuw webview pagina een nieuwe notebook tab aan.

Ik heb ooit eens een gesloten browser gemaakt met tab support, zie hier: http://forum.ubuntu-nl.org/etalage/browser-zonder-naam/
De code staat gewoon in het bericht. Kijk vooral naar PageView en MainView._build_notebook_tabs().

Re: Webbrowser.
« Reactie #2 Gepost op: 2013/04/19, 17:09:17 »
Heb die code erin maar hoe maak je nou een tabblad aan dan?

« Laatst bewerkt op: 2013/04/19, 17:15:31 door xCombat xWolfez »
GreetZ WolfeZ
Mwanzo lid, Ik ben altijd bereid om je te helpen met alles. Onthou domme vragen bestaan niet, dus stel ze daar ben ik voor!

Re: Webbrowser.
« Reactie #3 Gepost op: 2013/04/19, 18:21:25 »
Post uw code eens, want zomaar code ergens inzetten werkt natuurlijk niet. Het was ook maar als voorbeeld bedoeld, kijk eens hoe het daar gedaan word, bergijp de code en pas het aan naar eigen wens.

Re: Webbrowser.
« Reactie #4 Gepost op: 2013/04/19, 18:22:52 »
#!/usr/bin/env python
#
# [Copyright by WolfeZ]

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

#you need to import webkit and gobject, gobject is needed for threads
import webkit
import gobject

import webbrowser


class Browser:
    default_site = "http://google.com/"

    def delete_event(self, widget, event, data=None):
        return False

    def destroy(self, widget, data=None):
        gtk.main_quit()

    def __init__(self):
        gobject.threads_init()
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_resizable(True)
        self.window.set_position(gtk.WIN_POS_CENTER_ALWAYS)
        self.window.set_size_request(1000, 500)
        self.window.connect("delete_event", self.delete_event)
        self.window.connect("destroy", self.destroy)
        self.window.set_title("Bulletstar browser")

        #webkit.WebView allows us to embed a webkit browser
        #it takes care of going backwards/fowards/reloading
        #it even handles flash
        self.web_view = webkit.WebView()
        self.web_view.open(self.default_site)

        toolbar = gtk.Toolbar()
       

        #create the back button and connect the action to
        #allow us to go backwards using webkit
        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):
        '''When the user enters an address in the bar, we check to make
           sure they added the http://, if not we add it for them.  Once
           the url is correct, we just ask webkit to open that site.'''
        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):
        '''Webkit will remember the links and this will allow us to go
           backwards.'''
        self.web_view.go_back()

    def go_forward(self, widget, data=None):
        '''Webkit will remember the links and this will allow us to go
           forwards.'''
        self.web_view.go_forward()

    def refresh(self, widget, data=None):
        '''Simple makes webkit reload the current back.'''
        self.web_view.reload()

    def update_buttons(self, widget, data=None):
        '''Gets the current url entry and puts that into the url bar.
           It then checks to see if we can go back, if we can it makes the
           back button clickable.  Then it does the same for the foward
           button.'''
        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())

  # Internal methods
    def _build_notebook_tabs(self):
        """
        Build a notebook tab for each page defined in the preferences
        """

        for name, url in PAGES:
            logger.info("Setting up page for '%s - %s'", name, url)
            view = PageView(url)
            label = TabLabel(name, view)
            self._notebook.append_page(view, label)

    def main(self):
        gtk.main()

if __name__ == "__main__":
    browser = Browser()
    browser.main()
GreetZ WolfeZ
Mwanzo lid, Ik ben altijd bereid om je te helpen met alles. Onthou domme vragen bestaan niet, dus stel ze daar ben ik voor!

Re: Webbrowser.
« Reactie #5 Gepost op: 2013/04/19, 18:47:38 »
Ik zal er straks eens naar kijken. Een paar kleine tips al:

 - gobject.threads_init() moet zo vroeg mogelijk in de code staan, gebruikelijk meteen na "import gobject". In dit script is het trouwens overbodig omdat er geen threads gebruikt worden.
 - webbrowser word geimporteerd, maar niet gebruikt.
 - Geen idee waarom het venster zowel de destroy als delete-event events gebruikt. Verwijder destroy en gebruik gtk.main_quit() in de delete-event.
 - set_size_request() word beter niet gebruikt, dit geeft een widget (een window in dit geval) een minimale grootte wat vervelend kan zijn op verschillende resoluties en systeeminstellingen zoals lettertype. Gebruik liever resize(width, height).
 - PyGTK is oud en gebruikt nog GTK2. Het beste is om op PyGI over te stappen zodat GTK3 gebruikt word.