<p>如果您在windows上,则可以使用C API通过<a href="https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowpos" rel="nofollow noreferrer">^{<cd1>}</a>移动窗口</p>
<pre><code>from ctypes import windll, Structure, wintypes, pointer
SWP_NOMOVE = 0x0002
SWP_NOOWNERZORDER = 0x0200
SWP_NOSIZE = 0x0001
def move_window_abs(x, y, hwnd=None):
if hwnd is None:
hwnd = pygame.display.get_wm_info()["window"]
windll.user32.SetWindowPos(hwnd, 0, x, y, 0, 0, SWP_NOSIZE | SWP_NOOWNERZORDER)
</code></pre>
<p>与辅助函数一起获得准确位置:</p>
<pre><code>class Rect(Structure):
_fields_ = [
("left", wintypes.LONG),
("top", wintypes.LONG),
("right", wintypes.LONG),
("bottom", wintypes.LONG),
]
def get_window_rect(hwnd=None):
if hwnd is None:
hwnd = pygame.display.get_wm_info()["window"]
r = Rect(0, 0, 0, 0)
windll.user32.GetWindowRect(hwnd, pointer(r))
return pygame.Rect(r.left, r.top, r.right - r.left, r.bottom - r.top)
</code></pre>
<p>还可以实现相对移动功能</p>
<pre><code>def move_window_rel(dx, dy, hwnd=None):
if hwnd is None:
hwnd = pygame.display.get_wm_info()["window"]
r = get_window_rect(hwnd)
windll.user32.SetWindowPos(hwnd, 0, r.x + dx, r.y + dy, 0, 0, SWP_NOSIZE | SWP_NOOWNERZORDER)
</code></pre>
<p>请注意,这些函数设置窗口的左上角,而不是中心</p>