0

wxpython を使用して Windows でアプリを作成しています。一部のデータを pubsub して html ビューを作成したいのですが、pubsub データは cmd ウィンドウで印刷できますが、webview でページを設定すると機能しません。webview を使用できますか?この効果を得るには?ps:webview がこれを行うことができ、リンクをクリックすると、新しいフレームをポップして、このリンクでいくつかのデータを解析できる場合は?

まあ、私は自分の問題を明確に説明していませんが、コードで明確に説明できるかもしれません:

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のwebviewでこれを実行できる可能性があることがわかり、コードを変更しました。

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' に一致する関数がありません

お時間をいただきありがとうございます。アドバイスをいただければ幸いです。

4

1 に答える 1

1

SetPagedocs関数によると、 2 つの引数が必要です。

から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- HTML データに割り当てられた URL。たとえば、相対パスの解決に使用されます。

2番目を空のままにしておくことができます。

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()
于 2013-04-29T13:12:27.183 に答える