2014-12-08 1 views
0

나는 WxPython을 사용하여 파이썬에서 웹 브라우저를 만들었습니다. 나는 모든 것을 작동시킬 수 있었고, 앞으로/뒤로 가고, 다시로드 할 수있었습니다. 내 유일한 문제는 프로그램의 상단에있는 제목을 웹 페이지의 제목으로 설정할 수 있기를 바랍니다. 나는 self.SetTitle(title)으로 제목을 설정하는 방법을 이해하고, 나는 또한 당신이 self.browser.GetCurrentTitle()을 사용하여 페이지의 타일을 얻을 수 있다는 연구 결과를 알고 있습니다. 그것을 사용하는 것만으로 문제는 사용자가 새 링크를 클릭 할 때 자신을 새로 고치지 않는 것이 한 가지 일이라는 것입니다. 그 라인을 따라WxPython 웹 브라우저 설정 제목

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

또는 뭔가 그냥 확실하지 않다 곳에 나 : 나는 새 페이지가로드 될 때 잡아 이런 일을 할 파이썬을 말할 수있는 함수 또는 무언가의 일종이 있으리라 믿고있어 내가 어떻게 그 기능에 "연결"할 수 있는지. 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.html2.WebView의 내부 웹 페이지의 현재 타이틀에 wx.Frame의 제목을 설정하고 때마다 새 링크를 이름을 변경하는 방법입니다 클릭 했습니까? 필요한

답변

0

웹보기 이벤트 내가 EVT_WEBVIEW_LOADED 이벤트를 캐치 이벤트 처리기에서 제목을 업데이트

+0

잠깐만,하지만 당신이 말하는 것을 발견했습니다. 완전한 대답은 아니지만 조금 대답합니다. :) – pears456

0

here 나열됩니다. 난 당신이 이런 식으로 뭔가를 할 수 있으리라 생각합니다 :

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

어떤 더 나은 될 수있다하는 것을 실제로 할 때 페이지 제목 변경을 감지하는 EVT_WEBVIEW_TITLE_CHANGED을 잡을 것입니다.

0

나는 Mike가 말한 것에서 그것을 잡으려고 이벤트를 사용하는 것이 효과가있을 것이라고 알았다. 그래서 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)