几天前在探索 pyglet 包时,我遇到了一个最奇怪的问题:虽然 window.set_location(x,y)、以屏幕为中心的窗口等工作正常,但在某个时刻我想像往常一样将 pyglet 窗口置于 Windows 屏幕的中心,但该窗口完全偏离中心。见下图。
然后我开始通过各种方式调查这个问题。其中之一是重新安装 pyglet。问题依然存在。
我也在网上进行了搜索,但找不到有关该问题的任何参考资料。
我做了一些实际测试,发现计算的(预期的)窗口位置与实际的(屏幕上显示的位置)之间存在恒定的差异。这个常数或因子是 1.25。屏幕上的坐标总是根据计算出的坐标增加该因子。我认为这与 dpi 有关,但 pyglet 中的 dpi 似乎仅适用于文本,更具体地说适用于字体。 那么这个修改屏幕位置的(像素化?)因素到底是什么以及它是如何生效的?
有人了解这个主题吗?
请注意,这个问题很可能无法重现,因为它是意外发生的,而且我不知道为什么或如何发生。不过,我可以为任何想尝试的人提供一个简单的代码(它很可能会正常工作!🙂:
import pyglet
screen_w, screen_h = 1920, 1080 # Windows screen size
window_w, window_h = 400,400 # pyglet window size
window = pyglet.window.Window(window_w, window_h)
window.set_location((screen_w-window_w)//2, (screen_h-window_h)//2) # Center the window on the screen
pyglet.app.run()
问题解决了。确实是DPI的问题。 需要采取以下行动:
import ctypes
ctypes.windll.user32.SetProcessDPIAware()