我在使用pygame的全屏选项时遇到了一些问题。以下是一些简单绘制蓝色窗口的代码,通过按下 R 可以在蓝色和紫色之间切换。然后我们也可以使用 F 或者 G 切换全屏或窗口模式。其中 F 是显式实现的,而 G 使用了方法toggle_fullscreen()
。
import pygame, sys
from pygame.locals import *
#Initializes pygame
pygame.init()
#Defines the Clock object
clock = pygame.time.Clock()
#Just draws a blue screen
size = (960, 540)
blue = (0,0,100)
purp = (100,0,100)
is_blue = True
display_surf = pygame.display.set_mode(size, RESIZABLE)
display_surf.fill(blue)
mainLoop = True
is_fullscreen = False
#Mainloop
while mainLoop:
dt = clock.tick(12)
for event in pygame.event.get():
if event.type == pygame.QUIT:
mainLoop = False
if event.type == pygame.KEYDOWN:
#Single key pressed
if event.key == K_f:
#Toggles fullscreen
is_fullscreen = not is_fullscreen
old_surface = display_surf
setmode = FULLSCREEN if is_fullscreen else RESIZABLE
display_surf = pygame.display.set_mode(size, setmode)
display_surf.blit(old_surface, (0,0))
del old_surface
if event.key == K_q:
#Quits the app
mainLoop = False
if event.key == K_r:
#Redraws the blue or purple
print("Trying to flip colors")
display_surf.fill(purp if is_blue else blue)
is_blue = not is_blue
if event.key == K_g:
#Toggles fullscreen with the dedicated method
is_fullscreen = not is_fullscreen
pygame.display.toggle_fullscreen()
pygame.display.update()
pygame.quit()
我使用的是Ubuntu 18.04,Python版本是3.6.8。以下是我的观察结果:
- 使用pygame 2.0.0.dev6,在按下F或G键进入全屏模式时,屏幕会出现以下情况:
- 闪烁几次
- 变为任务栏中的最小化图标
- 如果我点击图标,则屏幕再次闪烁几次,最终进入全屏模式
- 问题:屏幕完全黑屏,R按钮不会翻转颜色(但会打印消息)
- 仍在使用pygame 2.0.0.dev6。在从全屏模式切换回窗口模式时,G和F按钮表现不同:在使用G键返回窗口模式后,R按钮即使在窗口模式下也不会翻转颜色。而当我使用F键时,它可以正常工作。
- 使用pygame 2.0.0.dev3时,G按钮完全不起作用,而F的行为与之前相同。
我的主要问题是1.4:全屏模式完全黑屏。
现在,让我们进行修改。更改代码中F按钮的以下行:
setmode = FULLSCREEN|SCALED if is_fullscreen else RESIZABLE #FULLSCREEN -> FULLSCREEN|SCALED
这会全屏显示当前屏幕分辨率,而不是我在顶部指定的分辨率。现在问题1.1.、1.2.和1.3.都解决了:应用程序立刻全屏显示。但问题1.4.仍然存在,此外该程序不再接受输入。如果我按Q键,它不会退出。它不接受Alt+Tab或Alt+F4,因此我必须重新启动计算机。
G
会绘制蓝屏。对于F
,我必须复制表面以查看蓝屏 -old_surface = display_surf.copy()
。如果不复制,您只会创建到display_surf
的别名/引用,当您创建新窗口时,它可能会被清除。R
适用于所有方法。 - furastty7
中运行,您可以使用Ctrl+Alt+F1
切换到文本模式的终端tty1
,重新登录系统并使用ps aux | grep python
查看所有Python程序及其ID的列表,以获取pygame程序的ID,并使用kill ID
停止/杀死该程序。然后,您可以使用Ctrl+Alt+F7
返回带有GUI的终端。 - furastty2
到tty6
或者按下Ctrl+Alt+F2
到Ctrl+Alt+F6
来代替tty1
。 - furasCtrl+Alt+Backspace
可以注销您的系统并关闭所有正在运行的程序 - 您只需要重新登录即可。这比重新启动整个系统更快。 - furas