python - 制作一个可以捕捉到屏幕的 pygame 可调整大小的窗口

标签 python pygame

我创建了一个简单的屏幕:

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/

相关文章:

python - 使用 matplotlib 绘制 pandas 数据框时出现 KeyError

python - 在 Django 中实现多个(复选框)选择 + "Other"小部件

python - 我怎样才能在pygame中获得流畅的运动?

python - 如果我导入它,为什么没有定义它?

python - 哪个版本的 pygame 适合我?

python - 在将字符串强制转换为 unicode 时如何让 python 2.x 发出警告?

python - Solid 的核心计算多次返回输出

python - 如何在 Python 脚本中导入和使用 csvkit

python - Rect.move() 不移动矩形

python - cvtColor 断言失败 scn == 3 || scn ==4,但是图像确实有3个 channel 并且存在