我在windows中使用wxpython创建一个应用程序,我想发布一些数据来创建一个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样式,我想也许我可以打开一个新框架来显示一些内容,当我通过链接解析时点击链接。
所以,我在谷歌搜索,然后发现也许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:没有匹配的函数 fo overoaded 'WebView_SetPage'
感谢您的时间,任何建议都非常感谢。