簡體   English   中英

如何將 pygame window 固定在頂部?

[英]How to pin a pygame window on top?

我需要讓 pygame window 停留在其他 windows 之上。 我在這個討論中找到了一種方法:

如何使 python window 以“始終在頂部”運行?

但這在我的 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正常工作,您必須首先配置函數的 arguments 的類型(如果您在 32 位機器上,IIRC 則不必這樣做)。

所以你的代碼應該是這樣的:

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 package 代替,因為這些函數可以正常工作並且您需要的常量可用。

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM