WxPython Web浏览器设置标题

时间:2014-12-08 22:51:23

标签: python wxpython

我使用WxPython在python中创建了一个Web浏览器。我已经能够使所有功能正常运行,前进/后退,重新加载等等。我唯一的问题是我希望能够将程序顶部的标题设置为网页标题。我了解如何使用self.SetTitle(title)设置标题,我也从已经完成的一些研究中了解到,您可以使用self.browser.GetCurrentTitle()获取页面的图块。使用它的唯一问题是,当用户点击新链接时,它不会刷新它自己的一次性事物。我假设有一些函数或者我可以在加载新页面时捕获的东西,并告诉python做这样的事情:

def OnLoad(self, event):
     self.webtitle = self.browser.GetCurrentTitle()
     self.browser.SetTitle(self.webtitle)

或者沿着这些方向的事情,我不知道我可以在哪里或如何连接或者#34;赶上"那个功能。我已阅读wx.html2.WebView的文档,但我无法理解如何执行此操作,我还查看了此网站以及一些邮件列表,但我可以'似乎找到任何可以解释如何做到这一点的东西。

以下是运行浏览器的主要代码(显然我已经缩短了它)。

class PyBrowser(wx.Frame): 
  def __init__(self, *args, **kwds): 
    wx.Frame.__init__(self, *args, **kwds)
    self.SetTitle('PyBrowser')
    sizer = wx.BoxSizer(wx.VERTICAL) 
    self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
    #Element Variables 
    self.browser = wx.html2.WebView.New(self) 
    self.address = wx.TextCtrl(self, value="http://",size=(500, 26))
    self.go = wx.Button(self, label="Go", id=wx.ID_OK)
    self.back = wx.BitmapButton(self, -1, wx.Bitmap('img/Back Button.png', wx.BITMAP_TYPE_PNG), size=(26,26) ,style=wx.NO_BORDER)#wx.Button(self, label="Back") 
    self.forward = wx.BitmapButton(self, -1, wx.Bitmap('img/Forward Button.png', wx.BITMAP_TYPE_PNG), size=(26,26) ,style=wx.NO_BORDER)#wx.Button(self, label="Forward")
    self.reload = wx.BitmapButton(self, -1, wx.Bitmap('img/Reload Button.png', wx.BITMAP_TYPE_PNG), size=(26,26) ,style=wx.NO_BORDER)#wx.Button(self, label = "Refresh")
    self.result = None
    #Nav area
    addressarea = wx.BoxSizer()
    addressarea.Add(self.address, proportion = 1, border = 0)
    ...
    #Adding elements
    sizer.Add(addressarea, proportion = 0, flag = wx.EXPAND, border = 0)
    sizer.Add(self.browser, 1, wx.EXPAND, 10) 
    #Button binding
    self.Bind(wx.EVT_BUTTON, self.OnGo, id=wx.ID_OK)
    ...
    #Menu bar stuff
    #File Menu
    self.fileMenu = wx.Menu()
    self.New = self.fileMenu.Append(wx.ID_ANY, 'New Window')
    ...
    #Help Menu
    self.helpMenu = wx.Menu()
    self.Help = self.helpMenu.Append(wx.ID_ANY, 'Help')
    ...
    self.Bind(wx.EVT_MENU,self.OnHelp,self.Help)
    ...
    #Adding the actual Menu Bar

    self.menuBar = wx.MenuBar()
    self.menuBar.Append(self.fileMenu, 'File')
    self.menuBar.Append(self.helpMenu, 'Help')
    self.SetMenuBar(self.menuBar)

    self.SetSizer(sizer) 
    self.SetSize((1000, 700)) 
  def OnGo(self, event):
    self.result = self.address.GetValue()
    self.browser.LoadURL(self.result)
 if __name__ == '__main__': 
    app = wx.App() 
    dialog = PyBrowser(None, -1) 
    dialog.browser.LoadURL("http://www.google.com") 
    dialog.Show() 
    app.MainLoop() 

总结我要问的是如何将wx.Frame的标题设置为wx.html2.WebView内网页的当前标题,并在每次点击新链接时更改名称?

3 个答案:

答案 0 :(得分:0)

您需要的网络浏览事件列在here

答案 1 :(得分:0)

我会捕获EVT_WEBVIEW_LOADED事件并更新事件处理程序中的标题。我相信你可以这样做:

def onLoaded(self, event):
    title = self.browser.GetCurrentTitle()
    self.SetTitle(title)

更好的是捕获EVT_WEBVIEW_TITLE_CHANGED,因为它实际上检测到页面标题何时发生变化。

答案 2 :(得分:0)

我发现,根据迈克的说法,使用一个事件来捕捉它会起作用。因此,我使用EVT_WEBVIEW_TITLE_CHANGED代替EVT_WEBVIEW_LOADED,然后将事件绑定到我的函数以处理更改标题。它看起来像这样:

#Binding the function the event to the function. 
self.Bind(wx.html2.EVT_WEBVIEW_LOADED, self.OnPageLoad, self.browser)

#Function binding to the page loading 
def OnPageLoad(self, event):
    self.WebTitle = self.browser.GetCurrentTitle()
    self.SetTitle(self.WebTitle)