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' に一致する関数がありません
お時間をいただきありがとうございます。アドバイスをいただければ幸いです。