RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 938464
Accepted
ioprst
ioprst
Asked:2020-01-30 16:50:25 +0000 UTC2020-01-30 16:50:25 +0000 UTC 2020-01-30 16:50:25 +0000 UTC

cefpython3 js和python连接

  • 772

蟒蛇 3.4。图形用户界面 - wxPython。

有必要以 SVG 文档中声明的像素为单位计算文本的大小。

<svg viewBox="0 0 {width} {height}" xmlns="http://www.w3.org/2000/svg" id="svg" height="100%" width="100%">
  <text font-family="{font}" font-size="{size}" id="user_text">{text}</text>
</svg>

Python 和 wxPython 无法做到这一点。wxPython 允许您定义将占用具有特定字体、大小等的文本的尺寸,但它们对于 SVG 不正确(据我了解,由于 svg 文档缩放)。

找到了一种通过 JS 计算文本大小的方法:

let text = document.getElementById("user_text");
let box = text.getBBox();
let w = box.width;
let h = box.height;

该解决方案给出了正确的结果。

我需要在我的 Python GUI 程序中使用 JS 中计算出来的值。

wxPython 中内置的网络引擎并没有把它拉出来(有一些旧的 IE)。

他们建议图书馆 cefpython3 - Chromium Embedded Framework。它允许您将浏览器连接到 GUI。这很好用。

正如我从教程中了解到的,您可以通过首先声明它们来从 Python 调用 JS 方法。GitHub/示例

但是我没有办法实现一种机制,以便在执行一个 JS 函数后,将结果返回给 Python 并使用它。

这甚至可能吗?如果是,请告诉我,在哪个方向挖掘。

python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    ioprst
    2020-01-30T17:58:04Z2020-01-30T17:58:04Z

    一般来说,他们提供了一个链接(开发人员)到一个更简单的例子。结果是以下(非理想)解决方案:

    import sys
    import base64
    
    from cefpython3 import cefpython as cef
    
    
    def create_HTML(width, height, font, size, text):
        HTML_code = """
        <!DOCTYPE html>
        <html>
        <head>
        </head>
        <body>
            <svg viewBox="0 0 {width} {height}" xmlns="http://www.w3.org/2000/svg" id="svg" height="100%" width="100%">
                <text font-family="{font}" font-size="{size}" id="user_text">{text}</text>
            </svg>
            <script type=text/javascript>
                function js_function() {{
                    let text = document.getElementById("user_text");
                    let box = text.getBBox();
                    let w = box.width;
                    let h = box.height;
                    py_function(w, h, js_callback);
                }}
                function js_callback(py_callback) {{
    
                }}
            </script>
        </body>
        </html
        """.format(width=width, height=height, font=font, size=size, text=text)
        return HTML_code
    
    
    def main():
        cef.Initialize()
        browser = cef.CreateBrowserSync(url=cef.GetDataUrl(create_HTML(256, 256, 'Courier New', 16, 'Test Text')))
        browser.SetClientHandler(LoadHandler())
        bindings = cef.JavascriptBindings()
        bindings.SetFunction("py_function", py_function)
        bindings.SetFunction("py_callback", py_callback)
        browser.SetJavascriptBindings(bindings)
        cef.MessageLoop()
        del browser
        cef.Shutdown()
    
    
    def py_function(w, h, js_callback):
        print(w, h)
        # js_callback.Call("I am a Python string #2", py_callback)
    
    
    def py_callback(w, h):
        pass
    
    
    class LoadHandler(object):
        def OnLoadEnd(self, browser, **_):
            browser.ExecuteFunction("js_function")
    
    
    if __name__ == '__main__':
        main()
    

    在py_function中,就是需要获取的那两个float值\u200b\u200b。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5