我如何在 python3 上的 cefpython 运行 上设置高 dpi 而没有显示错误?
How can i set up high dpi on cefpython running on python3 without display bugs?
我有一个代码曾经 运行 在 python2 上没问题。此代码是一个 cefpython 浏览器,与位于 git cefpython 存储库中的 wxpython 示例非常相似。现在我搬到了 python3 并且我面临着显示错误,就像这张照片中的一个:
关于dpi的代码如下:
def main():
...
if WINDOWS:
# noinspection PyUnresolvedReferences, PyArgumentList
cef.DpiAware.EnableHighDpiSupport()
cef.Initialize(settings=settings)
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, id=wx.ID_ANY,
title='', size=(WIDTH, HEIGHT))
self.browser = None
...
global g_count_windows
g_count_windows += 1
if WINDOWS:
# noinspection PyUnresolvedReferences, PyArgumentList
print("[wxpython.py] System DPI settings: %s"
% str(cef.DpiAware.GetSystemDpi()))
if hasattr(wx, "GetDisplayPPI"):
print("[wxpython.py] wx.GetDisplayPPI = %s" % wx.GetDisplayPPI())
print("[wxpython.py] wx.GetDisplaySize = %s" % wx.GetDisplaySize())
print("[wxpython.py] MainFrame declared size: %s"
% str((WIDTH, HEIGHT)))
size = scale_window_size_for_high_dpi(WIDTH, HEIGHT)
print("[wxpython.py] MainFrame DPI scaled size: %s" % str(size))
wx.Frame.__init__(self, parent=None, id=wx.ID_ANY,
title='wxPython example', size=size)
print("[wxpython.py] MainFrame actual size: %s" % self.GetSize())
与dpi和版本相关的输出打印为:
[wxpython.py] CEF Python 66.0
[wxpython.py] Python 3.7.3 32bit
[wxpython.py] wxPython 4.0.6 msw (phoenix) wxWidgets 3.0.5
[wxpython.py] System DPI settings: (120, 120)
[wxpython.py] wx.GetDisplayPPI = (157, 158)
[wxpython.py] wx.GetDisplaySize = (1920, 1080)
[wxpython.py] MainFrame declared size: (800, 600)
[wxpython.py] MainFrame DPI scaled size: (1000, 750)
我如何 运行 这个例子 python3?
感谢您的进一步帮助。
里卡多
Czarek Tomczak 在对我的问题的评论中指出了我的问题的解决方案:https://github.com/cztomczak/cefpython/issues/530#issuecomment-505066492
将参数 {'disable-gpu': ''} 添加到开关解决了我的问题。
cef.Initialize(settings={}, switches={'disable-gpu': ""})
在 link 上可用的线程上,它说这不是正确的解决方案。它对我有用,直到现在我才遇到问题。但如果有人知道另一种解决方案,我可以试试。
我有一个代码曾经 运行 在 python2 上没问题。此代码是一个 cefpython 浏览器,与位于 git cefpython 存储库中的 wxpython 示例非常相似。现在我搬到了 python3 并且我面临着显示错误,就像这张照片中的一个:
关于dpi的代码如下:
def main():
...
if WINDOWS:
# noinspection PyUnresolvedReferences, PyArgumentList
cef.DpiAware.EnableHighDpiSupport()
cef.Initialize(settings=settings)
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, id=wx.ID_ANY,
title='', size=(WIDTH, HEIGHT))
self.browser = None
...
global g_count_windows
g_count_windows += 1
if WINDOWS:
# noinspection PyUnresolvedReferences, PyArgumentList
print("[wxpython.py] System DPI settings: %s"
% str(cef.DpiAware.GetSystemDpi()))
if hasattr(wx, "GetDisplayPPI"):
print("[wxpython.py] wx.GetDisplayPPI = %s" % wx.GetDisplayPPI())
print("[wxpython.py] wx.GetDisplaySize = %s" % wx.GetDisplaySize())
print("[wxpython.py] MainFrame declared size: %s"
% str((WIDTH, HEIGHT)))
size = scale_window_size_for_high_dpi(WIDTH, HEIGHT)
print("[wxpython.py] MainFrame DPI scaled size: %s" % str(size))
wx.Frame.__init__(self, parent=None, id=wx.ID_ANY,
title='wxPython example', size=size)
print("[wxpython.py] MainFrame actual size: %s" % self.GetSize())
与dpi和版本相关的输出打印为:
[wxpython.py] CEF Python 66.0
[wxpython.py] Python 3.7.3 32bit
[wxpython.py] wxPython 4.0.6 msw (phoenix) wxWidgets 3.0.5
[wxpython.py] System DPI settings: (120, 120)
[wxpython.py] wx.GetDisplayPPI = (157, 158)
[wxpython.py] wx.GetDisplaySize = (1920, 1080)
[wxpython.py] MainFrame declared size: (800, 600)
[wxpython.py] MainFrame DPI scaled size: (1000, 750)
我如何 运行 这个例子 python3?
感谢您的进一步帮助。 里卡多
Czarek Tomczak 在对我的问题的评论中指出了我的问题的解决方案:https://github.com/cztomczak/cefpython/issues/530#issuecomment-505066492
将参数 {'disable-gpu': ''} 添加到开关解决了我的问题。
cef.Initialize(settings={}, switches={'disable-gpu': ""})
在 link 上可用的线程上,它说这不是正确的解决方案。它对我有用,直到现在我才遇到问题。但如果有人知道另一种解决方案,我可以试试。