我创建了一个简单的屏幕:
user_display = pg.display.Info()
win = pg.display.set_mode((user_display.current_w, user_display.current_h), pg.RESIZABLE)
这将创建一个可以调整大小的窗口,它将自身设置为用户当前的屏幕大小。这样做的问题是 window 的位置出现在角落处。理想情况下,默认情况下单击窗口顶部的全屏图标时会发生所需的效果。有没有办法设置让屏幕自动对齐到顶部?
最佳答案
我猜你说的是最大化窗口,而不是全屏模式。
如果您只关心 Windows,则可以使用 Win32-API 来最大化窗口(使用 win32gui
模块):
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()
关于python - 制作一个可以捕捉到屏幕的 pygame 可调整大小的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62034222/