我正在尝试创建一个自动安装pypi软件包的应用程序,该软件包解析了使用urlopen
从网站中选择的用户。我设法得到html,解码并将其转换为TkinterHtml小部件。但是,它将使用APPCRASH
使python解释器崩溃。因此,我将已删除的URL替换为更简单的html文本。但是,这次它不会将图像渲染到窗口小部件上(非图像标记像p一样工作正常)。我试图阅读tcl版本的文档,但我无法将其应用于python。
我从here安装了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()
答案 0 :(得分:2)
您需要一个检索图像并创建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图像的列表 名称和脚本,然后在没有时删除图像 需要更长时间,评估脚本。