微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将pygame窗口固定在顶部?

如何解决如何将pygame窗口固定在顶部?

我需要让一个 pygame 窗口停留在其他窗口的顶部。我在这个讨论中找到了一种方法

How to make python window run as "Always On Top"?

但这在我的 python 代码中不起作用。

这是我的代码

# Imports
import pygame as pg
from ctypes import windll

SetwindowPos = windll.user32.SetwindowPos

pg.init()
win = pg.display.set_mode((200,30))

x,y = 100,100
# Pin Window to the top
SetwindowPos(pygame.display.get_wm_info()['window'],-1,x,y,0x0001)


#Main Loop
run = True
while run:
    for event in pg.event.get():
        if event.type == pg.QUIT:
            run = False
            break

解决方法

要使 ctypes.windll 工作,您必须首先配置函数参数的类型(IIRC,如果您使用的是 32 位机器,则不必这样做)。

所以你的代码应该是这样的:

import pygame
import ctypes
from ctypes import wintypes 

def main():
    pygame.init()
    screen = pygame.display.set_mode((400,200))
    
    hwnd = pygame.display.get_wm_info()['window']
    
    user32 = ctypes.WinDLL("user32")
    user32.SetWindowPos.restype = wintypes.HWND
    user32.SetWindowPos.argtypes = [wintypes.HWND,wintypes.HWND,wintypes.INT,wintypes.UINT]
    user32.SetWindowPos(hwnd,-1,600,300,0x0001)
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return
        screen.fill('grey')
        pygame.display.flip()

if __name__ == '__main__':
    main()

我更喜欢使用 pywin32 包,因为函数可以正常工作并且您需要的常量可用。

import pygame
import win32gui
import win32con

def main():
    pygame.init()
    screen = pygame.display.set_mode((400,200))

    hwnd = win32gui.GetForegroundWindow()

    win32gui.SetWindowPos(hwnd,win32con.HWND_TOPMOST,win32con.SWP_NOSIZE)
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return
        screen.fill('grey')
        pygame.display.flip()

if __name__ == '__main__':
    main()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。