簡體   English   中英

如何使用pygame制作自定義的最小化,最大化和關閉按鈕?

[英]How do I go about making custom minimize, maximize, and close buttons with pygame?

我正在創建一個游戲,並且我想添加自定義按鈕以最小化,最大化和關閉窗口,類似於不和諧的桌面應用程序

Pygame並不真正適合該任務。

這是一個正在運行的示例:

import pygame
import pygame.freetype

import ctypes
user32 = ctypes.WinDLL('user32')
SW_MAXIMISE = 3
SW_SHOWNORMAL = 1

def main():
    pygame.init()
    flags = pygame.RESIZABLE
    screen = pygame.display.set_mode((500, 500), flags)
    hWnd = user32.GetForegroundWindow()
    orgsize = None 

    clock = pygame.time.Clock()

    min = pygame.Rect((0, 16, 32, 32))
    max = pygame.Rect((0, 16, 32, 32))
    close = pygame.Rect((0, 16, 32, 32))

    min.right = screen.get_rect().right - 90
    max.right = screen.get_rect().right - 50
    close.right = screen.get_rect().right - 10

    font = pygame.freetype.SysFont(None, 32)
    font.origin = True
    while True:
        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                return
            if e.type == pygame.VIDEORESIZE:
                screen = pygame.display.set_mode((e.w, e.h), flags)
                min.right = screen.get_rect().right - 90
                max.right = screen.get_rect().right - 50
                close.right = screen.get_rect().right - 10
            if e.type == pygame.MOUSEBUTTONDOWN:
                pos = pygame.mouse.get_pos()
                if close.collidepoint(pos):
                    return
                if min.collidepoint(pos):
                    pygame.display.iconify()
                if max.collidepoint(pos):
                    if not orgsize:
                        orgsize = screen.get_rect().size
                        user32.ShowWindow(hWnd, SW_MAXIMISE)
                    else:
                        user32.ShowWindow(hWnd, SW_SHOWNORMAL)
                        screen = pygame.display.set_mode(orgsize, flags)
                        orgsize = None

        screen.fill((30, 30, 30))
        pygame.draw.rect(screen, pygame.Color('dodgerblue'), max)
        pygame.draw.rect(screen, pygame.Color('darkorange'), min)
        pygame.draw.rect(screen, pygame.Color('darkred'), close)
        font.render_to(screen, min.move(7, -10).bottomleft, '_')
        font.render_to(screen, max.move(4, -5).bottomleft, 'O')
        font.render_to(screen, close.move(4, -5).bottomleft, 'X')
        pygame.display.update()
        clock.tick(60)

if __name__ == '__main__':
    main()
    pygame.quit()

最小化很容易:只需調用pygame.display.iconify()

關閉也很容易:只需退出主循環即可。

最大化並不是那么容易:要使其發揮作用,您需要一個可調整大小的窗口,該窗口無法與無框架窗口一起使用(至少在Windows上如此)。 同樣,最大化窗口的代碼也是特定於平台的。 我上面的示例僅在Windows上有效,因為它使用了user32.dll。

除了最大化外,還可以切換到全屏模式,這樣就不必使用platfrom特定代碼,也不必費心處理分辨率更改。

暫無
暫無

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

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