我创建了一个简单的屏幕,其中包括:
user_display = pg.display.Info()
win = pg.display.set_mode((user_display.current_w, user_display.current_h), pg.RESIZABLE)
这将创建一个可以调整大小的窗口,该窗口将自身设置为用户当前的屏幕大小。问题在于窗口的位置偏向角落。理想情况下,默认情况下,理想的效果是单击窗口顶部的全屏图标时会发生的情况。有没有一种方法可以将其设置为使屏幕自动捕捉到顶部?
答案 0 :(得分:3)
我猜您在谈论最大化窗口,而不是全屏模式。
如果只关心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()
答案 1 :(得分:2)
可以在通过pygame.display.set_mode()
初始化窗口之前,通过设置环境变量SDL_VIDEO_WINDOW_POS
来设置窗口的位置。例如
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)
如果要在程序中更改窗口的位置,则必须先设置位置,然后通过pygame.display.set_mode
重新创建显示表面。
参见How to move a no frame pygame windows when user click on it?。