首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PySimpleGUI中呈现HTML?

在PySimpleGUI中呈现HTML?
EN

Stack Overflow用户
提问于 2022-01-29 22:47:20
回答 2查看 1.6K关注 0票数 2

有人知道是否有可能让PySimpleGUI呈现HTML吗?

我不是在追求一个成熟的浏览器,只是一个生活在PySimpleGUI窗口中的HTML浏览器。

我知道tkinter有一个叫做tk_html_widgets的模块,我也在研究webview模块能做什么。

我知道Qt是可能的,因为PySide附带了这样一个小部件,尽管我真的很喜欢PySimpleGUI。

我只是想知道是否有人会有这样的建议。

例如,我能否以某种方式将TK小部件(如tk_html_widgets )导入到PySimpleGUI中。

也许我遗漏了什么,而pysimpleGUI已经有了一个我不知道的HTML元素。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-30 07:26:35

这里,仅供参考,库tkhtmlview用于HTML解析器和构建器。

当超时事件发生时,您可以调用set_html(advertise, html)来更新新的公告/html,当从internet加载某些内容时,它可能会保存在那里。

代码语言:javascript
复制
from tkhtmlview import html_parser
import PySimpleGUI as sg

def set_html(widget, html, strip=True):
    prev_state = widget.cget('state')
    widget.config(state=sg.tk.NORMAL)
    widget.delete('1.0', sg.tk.END)
    widget.tag_delete(widget.tag_names)
    html_parser.w_set_html(widget, html, strip=strip)
    widget.config(state=prev_state)

html = """
<td colspan="2" class="infobox-image"><a href="https://en.wikipedia.org/wiki/RoboCop" class="image">
<img alt="RoboCop (1987) theatrical poster.jpg" src="https://upload.wikimedia.org/wikipedia/en/thumb/1/16/RoboCop_%281987%29_theatrical_poster.jpg/220px-RoboCop_%281987%29_theatrical_poster.jpg" decoding="async" width="250" height="386" class="thumbborder" srcset="//upload.wikimedia.org/wikipedia/en/1/16/RoboCop_%281987%29_theatrical_poster.jpg 1.5x" data-file-width="248" data-file-height="374"></a>
<div class="infobox-caption" style="text-align:center">Directed by Paul Verhoeven<br>Release date July 17, 1987</div></td>
"""

font = ("Courier New", 12, 'bold')
sg.theme("DarkBlue3")
sg.set_options(font=font)

layout_advertise = [
    [sg.Multiline(
        size=(25, 10),
        border_width=2,
        text_color='white',
        background_color='green',
        disabled=True,
        no_scrollbar=True,
        expand_x=True,
        expand_y=True,
        key='Advertise')],
]

keypad = [
    ["Rad/Deg",          "x!",   "(",  ")", "%", "AC"],
    ["Inv",       "sin", "ln",   "7", "8", "9", "÷" ],
    ["Pi",        "cos", "log",  "4",  "5", "6", "x" ],
    ["e",         "tan", "√",    "1",  "2", "3", "-" ],
    ["Ans",       "EXP", "POW",  "0",  ".", "=", "+" ],
]

layout_calculator = [
    [sg.Button(
        key,
        size=(7, 4),
        expand_x=key=="Rad/Deg",
        button_color=('white', '#405373') if key in "1234567890" else sg.theme_button_color(),
     ) for key in line]
            for line in keypad]

layout = [
    [sg.Frame("Calculator", layout_calculator, expand_x=True, expand_y=True),
     sg.Frame("Advertise",  layout_advertise, expand_x=True, expand_y=True)],
]
window = sg.Window('Title', layout, finalize=True, use_default_focus=False)
for element in window.key_dict.values():
    element.block_focus()

advertise = window['Advertise'].Widget

html_parser = html_parser.HTMLTextParser()
set_html(advertise, html)
width, height = advertise.winfo_width(), advertise.winfo_height()

while True:

    event, values = window.read()
    if event in (sg.WINDOW_CLOSED, 'Exit'):
        break
    print(event, values)

window.close()

票数 3
EN

Stack Overflow用户

发布于 2022-01-30 02:41:05

看起来,您可以使用tkhtmlview小部件来完成这一任务。我认为关键是使用TKroot窗口的PySimpleGUI属性获取tk根节点的句柄。您应该能够使用该句柄绘制大多数tk小部件。下面是一个在PySimpleGUI窗口中绘制HTML标签的简单示例:

代码语言:javascript
复制
import PySimpleGUI as sg
from tkhtmlview import HTMLLabel

layout = [[]]

window = sg.Window('Canvas test', layout, finalize=True)

my_label = HTMLLabel(window.TKroot, html='<h1>foobar</h1>')

my_label.pack()

while True:
    event, values = window.read()
    if event == sg.WIN_CLOSED:
        break
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70910389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档