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

标签 python python-3.x windows pygame always-on-top

我需要使 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, 0, 0, 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.INT, wintypes.INT, wintypes.INT, wintypes.UINT]
    user32.SetWindowPos(hwnd, -1, 600, 300, 0, 0, 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, 600, 300, 0, 0, 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()

关于python - 如何将 pygame 窗口固定在顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65683617/

相关文章:

python - Boto3 S3 client.put_bucket_logging() 坏了?

python - pandas parse_dates 似乎不起作用

python - 如何使用flask将数据传递到html页面?

windows I/O manager - IRP的read-like和write-like分类

windows - 通过双击或从 cmd 窗口检测 bat 文件是否正在运行

python - 从特定 URL 下载 CSV 文件

线程和图形用户界面应用程序之间的 Python 新样式信号和槽

python - urllib.error.HTTPError : HTTP Error 502: Bad Gateway PYTHON

python - 关于在 Python3 中将空格与一元运算符一起使用的逻辑

windows - 用IE7测试网站