Setpage не работает в веб-просмотре wxpython2.9, когда я использую pubsub

Я создаю приложение в Windows, используя wxpython, и я хочу опубликовать некоторые данные для создания представления html, данные pubsub могут быть напечатаны в окне cmd, но когда я устанавливаю страницу в веб-просмотре, это не работает, могу ли я использовать веб-просмотр сделать этот эффект? ps: если веб-просмотр может это сделать, и если щелкнуть ссылку, может ли он открыть новый кадр для анализа некоторых данных с помощью этой ссылки?

ну, я не описываю свою проблему четко, может быть, я могу четко описать ее по коду:

в wxpython2.8 мой код:

import time
import wx
import re
from threading import Thread
from wx.lib.pubsub import Publisher

import urllib2  
from win32gui import *
import win32gui
from wx.lib.wordwrap import wordwrap
import wx.html2 as webview
import lxml.html
import lxml.html.soupparser as soupparser


class ListenerThread(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.start() 

    def findtitle(self):
        ........
        ........

    def find_window(self):
        title = self.findtitle()
        dlg=win32gui.FindWindow(None,title)
        return dlg

    def run(self):
        tempWindowName=win32gui.GetWindowText (self.find_window())
        while True:
            ........
            ........
            Publisher().sendMessage("update", info)
        time.sleep(0.1)

class InfoFrame(wx.Frame):
    def __init__(self):
       wx.Frame.__init__(self, None, title="title",size=(430, 700))
       panel = InfoPanel(self)
       style= self.GetWindowStyle()
       self.SetWindowStyle(style|wx.STAY_ON_TOP)

class InfoPanel(wx.Panel):
    def __init__(self, parent):
        .......

        self.browser= wx.html.HtmlWindow(self)
        Publisher().subscribe(self.updateDisplay)


        ......

    def updateDisplay(self, msg):
        t = msg.data
        self.browser.SetPage("%s"%t)


class MyApp(wx.App):
    def OnInit(self):
        self.infoFrame=InfoFrame()       
        self.SetTopWindow(self.infoFrame)
        self.infoFrame.Show(True)    
        return True

    def OnExit(self):
        wx.Exit()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = MyApp(False)
    app.MainLoop()

структура информации, как

<a href=....>text1</a><br><a href=......>text2</a><br>.....

это анализ с другого веб-сайта с помощью lxml, и этот код работает, но я думаю, что это представление уродливо, я хочу добавить стиль CSS, и я думаю, что, возможно, я могу открыть новый фрейм, чтобы показать некоторый контент, который также анализируется по ссылке, когда я нажмите на ссылку.

Итак, я ищу в Google, а затем обнаружил, что, возможно, веб-просмотр в wxpython2.9 может это сделать, а затем я меняю свой код:

import time
import wx
import re
from threading import Thread
from wx.lib.pubsub import setupv1   
from wx.lib.pubsub import pub

import urllib2  
from win32gui import *
import win32gui
from wx.lib.wordwrap import wordwrap
import wx.html2 as webview
import lxml.html
import lxml.html.soupparser as soupparser

publisher = pub.Publisher()




class ListenerThread(Thread):
    def __init__(self):
        """Init Worker Thread Class."""
        Thread.__init__(self)
        self.start() 

    def findtitle(self):
        ........
        ........

    def find_window(self):
        title = self.findtitle()
        dlg=win32gui.FindWindow(None,title)
        return dlg

    def run(self):
        tempWindowName=win32gui.GetWindowText (self.find_window())
        while True:
            ........
            ........
            Publisher().sendMessage("update", info)
        time.sleep(0.1)

class InfoPanel(wx.Panel):
    def __init__(self, parent):
        .......

        self.browser= webview.WebView.New(self)
        publisher.subscribe(self.updateDisplay)


        ......

    def updateDisplay(self, msg):
        t = msg.data
        page = "<html><body>"+"%s"%t+"</body></html>"
        self.browser.SetPage("%s"%t)


class MyApp(wx.App):
    def OnInit(self):
        self.infoFrame=InfoFrame()       
        self.SetTopWindow(self.infoFrame)
        self.infoFrame.Show(True)    
        return True

    def OnExit(self):
        wx.Exit()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = MyApp(False)
    app.MainLoop()

но он показывает ошибку:

NotimpementedError: нет соответствующей функции для перегруженного "WebView_SetPage"

Спасибо за ваше время и любые советы ценятся.


person sword    schedule 17.11.2012    source источник
comment
Спасибо, bouke. Я не могу четко описать свою проблему, может быть, я смогу четко описать ее по коду.   -  person sword    schedule 18.11.2012


Ответы (1)


Согласно документам, функция SetPage требует двух аргументов.

от html2.py:

SetPage(self, String html, String baseUrl)
SetPage(self, InputStream html, String baseUrl)

из http://docs.wxwidgets.org/trunk/classwx_web_view.html:

html- Строка, содержащая данные HTML для отображения.
baseUrl- URL-адрес, назначенный данным HTML, который будет использоваться, например, для разрешения относительных путей.

Просто вы можете оставить вторую пустую.

import wx
import wx.html2


class AppFrame(wx.Frame):
    def __init__(self, parent):
        super(AppFrame, self).__init__(parent)

        self.html_view = wx.html2.WebView.New(self)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.html_view, 1, wx.EXPAND)
        self.SetSizer(sizer)

if __name__ == '__main__':
    app = wx.App()

    frame = AppFrame(None)
    frame.html_view.SetPage("<html><body>Hello World</body></html>", "")
    frame.Show()
    app.MainLoop()
person kiriki    schedule 29.04.2013