蟒蛇Tkinter TkinterHtml不能正常运作
问题描述:
我想做一个应用程序,它会自动安装pypi包解析用户从使用urlopen
网站选择的用户。我设法得到的HTML,解码并feeded它到TkinterHtml部件。然而,它会崩溃python解释器与APPCRASH
。因此,我将retieved网址替换为更简单的html文本。但是,这次它不会将图像渲染到窗口小部件上(非图像标签可以像p一样正常工作)。我曾尝试阅读tcl版本的文档,但我无法将其应用于python。 我从here安装了tkinterhtml。蟒蛇Tkinter TkinterHtml不能正常运作
from urllib.request import urlopen
try:
import tkinter as tk
from tkinter import ttk
except ImportError:
import Tkinter as tk
import ttk
from tkinterhtml import TkinterHtml
root = tk.Tk()
html = TkinterHtml(root, fontscale=0.8)
vsb = ttk.Scrollbar(root, orient=tk.VERTICAL, command=html.yview)
hsb = ttk.Scrollbar(root, orient=tk.HORIZONTAL, command=html.xview)
html.configure(yscrollcommand=vsb.set)
html.configure(xscrollcommand=hsb.set)
#html.tag("configure", "selection", "-background", "black")
html.grid(row=0, column=0, sticky=tk.NSEW)
vsb.grid(row=0, column=1, sticky=tk.NSEW)
hsb.grid(row=1, column=0, sticky=tk.NSEW)
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
#data = urlopen("http://www.wikipedia.org").read().decode()
#html.parse(data)
html.parse("""
<html>
<body>
<h1>Hello world!</h1>
<p>First para</p>
<ul>
<li>first list item</li>
<li>second list item</li>
<img src="http://upload.wikimedia.org/wikipedia/en/3/38/Google_App_Engine_Logo.png"></img>
</ul>
</body>
</html>
""")
root.mainloop()
答
您需要一个函数来检索图像并创建一个Tk对象。这似乎为我工作,
from PIL import Image, ImageTk
import io
# needed to hold references
images = {}
def test(url):
fp = urlopen(url)
data = fp.read()
fp.close()
image = Image.open(io.BytesIO(data))
photo = ImageTk.PhotoImage(image)
images[url] = photo
return photo
root = tk.Tk()
# define imagecmd callback imagecmd=test in order to handle the images
html = TkinterHtml(root, fontscale=0.8, imagecmd=test)
tkhtml documentation(TkInterHtml是tkhtml3包装)指出
除了更换整个文档节点(即),图像 其他几个使用以CSS格式化文档中的上下文为例,将 作为列表标记或背景。如果-imagecmd选项不是 设置为空字符串(默认值),则每次在文档中遇到图像URI为 时,它都会附加到-imagecmd脚本 并对结果列表进行评估。
该命令应该返回一个空字符串,一个Tk 图像的名称,或者一个正好两个元素的列表,一个Tk图像的名称和一个 脚本。如果结果是空字符串,则不显示图像 。如果结果是Tk图像名称,则图像将显示在窗口小部件中 。当图像不再需要时,删除 。如果命令的结果是包含Tk图像 名称和脚本的列表,则在不需要更长的 时删除图像,而是评估该脚本。
如果用户要按网页中的超链接,我如何检索URL并解析所有引用的图像?有没有回调呢? – user3167683
另外,如何使用这个?你打电话给测试功能吗?或者你只是解析(urlopen(“http://wikipedia.org”).read()。decode())? – user3167683
@ user3167683我的猜测是TkInterHtml仅适用于渲染网页,而不适合用户交互。 –