Automatically refresh label python
Question: 
    # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
    ### BEGIN LICENSE
    # Copyright (C) 2012 Marios Papachristou mrmarios97@gmail.com
    # This program is free software: you can redistribute it and/or modify it 
    # under the terms of the GNU General Public License version 3, as published 
    # by the Free Software Foundation.
    # 
    # This program is distributed in the hope that it will be useful, but 
    # WITHOUT ANY WARRANTY; without even the implied warranties of 
    # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 
    # PURPOSE.  See the GNU General Public License for more details.
    # 
    # You should have received a copy of the GNU General Public License along 
    # with this program.  If not, see <http://www.gnu.org/licenses/>.
    ### END LICENSE
    
    
    import gettext
    from gettext import gettext as _
    gettext.textdomain('quickbrowser')
    
    from gi.repository import Gtk, WebKit # pylint: disable=E0611
    import logging
    logger = logging.getLogger('quickbrowser')
    
    from quickbrowser_lib import Window
    from quickbrowser.AboutQuickbrowserDialog import AboutQuickbrowserDialog
    from quickbrowser.PreferencesQuickbrowserDialog import PreferencesQuickbrowserDialog
    
    
    # See quickbrowser_lib.Window.py for more details about how this class works
    class QuickbrowserWindow(Window):
        __gtype_name__ = "QuickbrowserWindow"
    
        def finish_initializing(self, builder): # pylint: disable=E1002
            """Set up the main window"""
            super(QuickbrowserWindow, self).finish_initializing(builder)
    
            self.AboutDialog = AboutQuickbrowserDialog
            self.PreferencesDialog = PreferencesQuickbrowserDialog
            self.goBack = self.builder.get_object('goBack')
            self.homeButton = self.builder.get_object('homeButton')
            self.refreshButton = self.builder.get_object('refreshButton')
            self.goButton = self.builder.get_object('goButton')
            self.currentaddresslabel = self.builder.get_object('currentaddresslabel')
            self.addressbar = self.builder.get_object('addressbar')
            self.viewwindow = self.builder.get_object('viewwindow')
            self.goForward = self.builder.get_object('goForward')
            self.zoomIn = self.builder.get_object('zoomIn')
            self.zoomOut = self.builder.get_object('zoomOut')
            self.webview = WebKit.WebView()
            self.viewwindow.add(self.webview)
            self.webview.show()
    
    
    
    
        def on_addressbar_activate(self, widget):
            address = widget.get_text()
            self.webview.open(address)
    
    
        def on_refreshButton_clicked(self, widget):
            self.webview.reload()
    
        def on_goBack_clicked(self,widget):
            self.webview.go_back();
    
        def on_goForward_clicked(self,widget):
            self.webview.go_forward();
    
        def on_zoomIn_activate(self,widget):
            self.webview.zoom_in();
    
        def on_zoomOut_activate(self,widget):
            self.webview.zoom_out();
    
        def on_goButton_clicked(self,widget):
            self.webview.open(self.addressbar.get_text())
    

I am currently developing a web browser in Python using python-webkit.

The source code above is written in order to manage the main window.

How can I constantly display current URL using webview.get_uri() method return
value inside a label?

Thanks in advance


Answer: 
    while True:
        updateLocationBar() # ;)
    

Surely the location bar already provides this? You could call your label
modifying function wherever `self.webview.open()` is called by writing a
wrapper like

    
    
    def self.webview.mysuperawesomeopen(uri):
        updateLocationBar()
        self.webview.open(uri)
    

and then modifying the calls appropriately. Or if you don't want to change the
calls, just move the existing `.open()` function like

    
    
    self.webview.openit = self.window.open
    def self.window.open(uri):
        updateLocationBar()
        self.webview.openit(uri)
    

**Edit:** You could also use a function decorator on `self.window.open()` like

    
    
    def labelled(f):
        def labelgo(*args, **kwargs):
            updateLocationBar(*args, **kwargs)
            self.webview.open(*args, **kwargs)
        return labelgo
    
    @labelled # You add this and leave the rest of self.window.open alone
    def self.window.open(uri):
        ...
    

This would be a better solution if you want to generalise (and you would make
the labelled decorator more general - I left this simple as an example).

