我使用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内网页的当前标题,并在每次点击新链接时更改名称?
答案 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)