我使用
创建了一个窗口pygame.display.set_mode((width, height),
pygame.OPENGL | pygame.DOUBLEBUF | pygame.RESIZABLE)
稍后在应用程序中,我希望能够向窗口询问其宽度和高度,以便我可以决定如何处理鼠标位置。
如何在程序的其他位置访问该pygame窗口的尺寸? (事件处理循环)
答案 0 :(得分:14)
你想得到表面,然后从表面物体中获得尺寸。
使用元组解包:
w, h = pygame.display.get_surface().get_size()
答案 1 :(得分:5)
首先获取显示表面可以获得窗口大小。 pygame.display.get_surface(),然后在表面上调用get_width()/ get_height()。
答案 2 :(得分:3)
喜欢这个!
/(\r?\n)[^\r\n]*$/
答案 3 :(得分:2)
import pygame as pg
def create_window(width, height):
"""create a width x height resizable window/frame"""
win = pg.display.set_mode((width, height), pg.RESIZABLE)
# optional fill bg red, default is black
win.fill((255, 0, 0))
# optional title info
sf = "size x=%s y=%s" % (width, height)
pg.display.set_caption(sf)
# any extra code here ...
# draw a white circle
white = (255, 255, 255)
# center can be fixed or calculated for resize
center = (150, 150)
radius = 100
pg.draw.circle(win, white, center, radius)
pg.display.flip()
return win
pg.init()
width = 300
height = 200
win = create_window(width, height)
# event loop and exit conditions (windows titlebar x click)
while True:
for event in pg.event.get():
if event.type == pg.VIDEORESIZE:
width, height = event.size
# redraw win in new size
win = create_window(width, height)
print(win.get_size()) # test
if event.type == pg.QUIT:
raise SystemExit
试试这个。
希望它有所帮助。
答案 4 :(得分:2)
添加另一个答案,因为我还没有看到这个。
screen = pygame.display.set_mode() # Default to screen resolution.
area = screne.get_rect()
我们可以在屏幕上调用get_rect(),因为它是一个表面对象。 Area将是一个Rect对象,其中包含(0,0,width,height)信息。
答案 5 :(得分:1)
changed = False
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit(0)
if event.type == pygame.VIDEORESIZE:
scrsize = event.size # or event.w, event.h
screen = pygame.display.set_mode(scrsize,RESIZABLE)
changed = True
在pygame.display.init doc page https://www.pygame.org/docs/ref/display.html#comment_pygame_display_update的评论中几乎完全相同 仅从2011-01-25T23:10:35略微编辑 - 戴夫伯顿谢谢戴夫
答案 6 :(得分:0)
gameDisplay = pygame.display.set_mode((800,600))
x = gameDisplay.get_width()
y = gameDisplay.get_height()
答案 7 :(得分:0)
您可以使用pygame.Surface
获取与显示关联的pygame.display.get_surface()
对象:
window_surface = pygame.display.get_surface()
可以分别用get_width()
get_height()
来每个 Surface 对象的宽度和高度:
window_width = pygame.display.get_surface().get_width()
window_height = pygame.display.get_surface().get_height()
get_size()
返回具有窗口宽度和高度的元组:
window_width, window_height = pygame.display.get_surface().get_size()
get_rect()
返回一个窗口大小的矩形,始终从(0,0)开始:
这可用于获取显示的中心:
window_center = pygame.display.get_surface().get_rect().center
它甚至可以用于将对象移动到窗口区域:
object_rect = pygame.Rect(x, y, w, h)
object_rect.clamp_ip(pygame.display.get_surface().get_rect())
最小示例:
import pygame
pygame.init()
pygame.display.set_mode((200, 200))
clock = pygame.time.Clock()
object_rect = pygame.Rect(pygame.display.get_surface().get_rect().center, (0, 0)).inflate(30, 30)
vel = 5
run = True
while run:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
print(pygame.key.name(event.key))
keys = pygame.key.get_pressed()
object_rect.move_ip(
(keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * vel,
(keys[pygame.K_DOWN] - keys[pygame.K_UP]) * vel)
object_rect.clamp_ip(pygame.display.get_surface().get_rect())
pygame.display.get_surface().fill([64] * 3)
pygame.draw.rect(pygame.display.get_surface(), (255, 0, 0), object_rect)
pygame.display.flip()
pygame.quit()
exit()