我正在尝试制作一个应用程序,该应用程序自动安装 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()

最佳答案

您需要一个函数来检索图像并创建一个 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 的包装器)指出

关于python - Tkinter TkinterHtml 不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35593028/

10-12 16:48