Сделайте окно pygame с изменяемым размером, которое можно привязать к экрану - PullRequest
2 голосов
/ 27 мая 2020

Я создал простой экран с помощью:

user_display = pg.display.Info()

win = pg.display.set_mode((user_display.current_w, user_display.current_h), pg.RESIZABLE)

Это создает окно, размер которого можно изменять, которое настраивается на текущий размер экрана пользователя. Проблема с этим в том, что расположение окна кажется далеким от угла. В идеале желаемый эффект будет таким, как если бы по умолчанию щелкнули полноэкранный значок в верхней части окна. Есть ли способ установить это так, чтобы экран автоматически привязывался к верхней части?

Ответы [ 2 ]

3 голосов
/ 27 мая 2020

Полагаю, вы говорите о максимальном увеличении окна, а не о полноэкранном режиме.

Если вас интересует только Windows, вы можете использовать Win32-API, чтобы развернуть окно (используя win32gui module):

import pygame
import win32gui
import win32con

def main():
    pygame.init()
    screen = pygame.display.set_mode((800, 600), pygame.RESIZABLE)
    win32gui.ShowWindow(win32gui.GetForegroundWindow(), win32con.SW_MAXIMIZE)

    ball = pygame.Rect(0, 300, 32, 32)
    dir = 1

    while True:
        events = pygame.event.get()

        for e in events:
            if e.type == pygame.QUIT:
                return
            if e.type == pygame.VIDEORESIZE:
                screen = pygame.display.set_mode((e.w,e.h), pygame.RESIZABLE)
                ball = pygame.Rect(0, int(e.h/2), 32, 32)

        if not screen.get_rect().contains(ball):
            dir *= -1
        ball.move_ip(dir, 0)

        screen.fill((30, 30, 30))
        pygame.draw.rect(screen, pygame.Color("dodgerblue"), ball)
        pygame.display.flip()
main()

Если вы хотите максимизировать окно в других системах, например Linux, я понятия не имею, но вы можете обернуть свое окно pygame в окно tkinter и максимизировать это:

import pygame
import tkinter as tk
import os

def main():
    root = tk.Tk()
    embed = tk.Frame(root, width = 800, height = 600)
    embed.pack(fill="both", expand=True)
    os.environ['SDL_WINDOWID'] = str(embed.winfo_id())
    os.environ['SDL_VIDEODRIVER'] = 'windib'
    root.state('zoomed')
    screen = pygame.display.set_mode((800, 600), pygame.RESIZABLE)

    ball = pygame.Rect(0, 300, 32, 32)
    dir = 1

    while True:
        events = pygame.event.get()

        for e in events:
            if e.type == pygame.QUIT:
                return
            if e.type == pygame.VIDEORESIZE:
                screen = pygame.display.set_mode((e.w,e.h), pygame.RESIZABLE)
                ball = pygame.Rect(0, int(e.h/2), 32, 32)

        if not screen.get_rect().contains(ball):
            dir *= -1
        ball.move_ip(dir, 0)

        screen.fill((30, 30, 30))
        pygame.draw.rect(screen, pygame.Color("dodgerblue"), ball)
        pygame.display.flip()
        root.update()      
main()
2 голосов
/ 27 мая 2020

Положение окна может быть установлено установкой переменной окружения SDL_VIDEO_WINDOW_POS перед инициализацией окна pygame.display.set_mode(). Например,

import os
import pygame

os.environ['SDL_VIDEO_WINDOW_POS'] = "%d, %d" %(20, 20)

pygame.init()
user_display = pg.display.Info()
win = pg.display.set_mode((user_display.current_w, user_display.current_h), pg.RESIZABLE)

См. Также SettingWindowPosition


Если вы хотите изменить положение окна в программе, вам необходимо установить сначала позицию и воссоздайте поверхность дисплея с помощью pygame.display.set_mode.
См. Как переместить pygame без фрейма windows, когда пользователь щелкает по нему? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...