【问题标题】:Tkinter TkinterHtml not functioningTkinter TkinterHtml 不起作用
【发布时间】:2016-06-06 04:54:11
【问题描述】:

我正在尝试制作一个自动安装 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()

【问题讨论】:

    标签: python python-3.x tkinter tcl


    【解决方案1】:

    您需要一个函数来检索图像并创建一个 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 并解析所有引用的图像?这个有回调吗?
    • 还有,这个怎么用?你调用测试功能吗?或者你只是解析(urlopen(“wikipedia.org").read().decode())?
    • @user3167683 我的猜测是 TkInterHtml 只适合渲染网页,不适合用户交互。
    猜你喜欢
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2018-03-05
    • 2016-12-11
    相关资源
    最近更新 更多