cef python调整大小时冻结

2024-06-23 03:28:51 发布

您现在位置:Python中文网/ 问答频道 /正文

今天我尝试使用cefpython开发一个UI,它允许我嵌入一个web浏览器并通过javascript绑定与之交互。在

我用它在Windows平台上开发。 为此,我使用了“多线程的消息循环”标志来提高性能。 我还在python3上使用wxpython来嵌入它。在

问题是当我调整窗口大小时,使用WindowUtils.OnSize()冻结我的应用程序。99%的情况下,它发生在浏览器加载时(但也发生在加载完成时(很少)。在

下面是要复制的示例代码:

import platform
import sys

import wx
from cefpython3 import cefpython

WindowUtils = cefpython.WindowUtils()

WIDTH = 800
HEIGHT = 600

import os

class MainFrame(wx.Frame):
    browser = None
    mainPanel = None

    def createMainBrowser(self):
        self.browser = self.createBrowser(self.mainPanel)

    def createBrowser(self, parent):
        browser = cefpython.CreateBrowserSync(
            self.getWindowInfo(parent),
            browserSettings={},
            navigateUrl='http://www.google.com'
        )
        return browser

    def getWindowInfo(self, parent):
        windowInfo = cefpython.WindowInfo()
        windowInfo.SetAsChild(parent.GetHandle(), [0, 0, WIDTH, HEIGHT])
        return windowInfo

    def __init__(self):
        wx.Frame.__init__(
            self, parent=None, id=wx.ID_ANY, title='wx', size=(WIDTH, HEIGHT)
        )
        self.mainPanel = wx.Panel(self)
        self.mainPanel.SetBackgroundColour(wx.GREEN)

        cefpython.PostTask(cefpython.TID_UI, self.createMainBrowser)

        self.mainPanel.Bind(wx.EVT_SIZE, self.OnSize)

    def OnSize(self, _):
        if not self.browser:
            return

        WindowUtils.OnSize(self.mainPanel.GetHandle(), 0, 0, 0)
        self.browser.NotifyMoveOrResizeStarted()


class App(wx.App):
    def OnInit(self):
        frame = MainFrame()
        frame.Show()
        return True

if __name__ == '__main__':
    sys.excepthook = cefpython.ExceptHook  # To shutdown all CEF processes on error
    cefpython.Initialize({
        "locales_dir_path": cefpython.GetModuleDirectory() + "/locales",
        "browser_subprocess_path": cefpython.GetModuleDirectory() + "/subprocess",
        "auto_zooming": "system_dpi",
        "multi_threaded_message_loop": True,
    })
    app = App(False)
    app.MainLoop()
    cefpython.Shutdown()

非常感谢你的帮助!在

阿兰


Tags: importselfbrowsernonereturndefwidthparent
1条回答
网友
1楼 · 发布于 2024-06-23 03:28:51

问题解决了! 而不是使用

def OnSize(self, _):
    if not self.browser:
        return

    WindowUtils.OnSize(self.mainPanel.GetHandle(), 0, 0, 0)
    self.browser.NotifyMoveOrResizeStarted()

我使用

^{pr2}$

我不知道这是否是因为我使用的是Windows10,但也许WindowsUtils需要更新!在

相关问题 更多 >

    热门问题