pygame错误:TypeError:必须是2项序列

2 投票
2 回答
10965 浏览
提问于 2025-04-18 09:34

我想在大学项目中看看pygame这个模块。我找到了一份很简短的教程,跟着它创建了一个游戏窗口。

这是我的代码:

import sys
import pygame
from pygame.locals import *

pygame.init()

screen_width = 800
screen_height = 600
screen = pygame.display.set_mode(screen_width,screen_height)
pygame.display.set_caption("pygame test")
pygame.mouse.set_visible(True)

done = False
while not done:
  for event in pygame.event.get():
    if (event.type == KEYUP) or (event.type == KEYDOWN):
      print(event)
    if (event.key == K_ESCAPE):
      done = True

但是当我尝试运行这个程序时,它出现了以下错误:

screen=pygame.display.set_mode(screen_width,screen_height)
TypeError: must be 2-item sequence, not int

根据我对函数调用的理解,它应该和我的例子一样能正常工作。网上对这个错误的进一步研究也没有让我找到什么有用的结果。

我正在使用OSX Mavericks系统,X11(或者更好的XQuartz),还有最新的python运行环境,并且pygame需要的所有模块都已经安装好了。

也许你能帮我一下。

2 个回答

2

你需要传递一个单独的 tuple,而不是两个分开的 int 来设置分辨率。仔细看看 pygame 的文档

screen = pygame.display.set_mode((screen_width, screen_height))
6

你需要一个 tuple,而不是整数:

screen = pygame.display.set_mode((screen_width,screen_height))

这是因为你可以把其他变量传递给 set_mode

screen = pygame.display.set_mode((screen_width, screen_height), 0, 32)

这是你修改后的代码:

import sys
import pygame
from pygame.locals import *

pygame.init()

screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width,screen_height))
pygame.display.set_caption("pygame test")
pygame.mouse.set_visible(True)

done = False
while not done:
  for event in pygame.event.get():
    if (event.type == KEYUP) or (event.type == KEYDOWN):
      print(event)
    if (event.key == K_ESCAPE):
      done = True

运行结果是:

截图

ScreenShot

控制台

bash-3.2$ python test.py
<Event(2-KeyDown {'scancode': 0, 'key': 304, 'unicode': u'', 'mod': 0})>
<Event(2-KeyDown {'scancode': 0, 'key': 310, 'unicode': u'', 'mod': 1})>
<Event(3-KeyUp {'scancode': 0, 'key': 304, 'mod': 1024})>
<Event(3-KeyUp {'scancode': 0, 'key': 310, 'mod': 0})>
bash-3.2$ 

正如你在 这里 看到的,你需要在尺寸周围加上方括号或普通括号。

撰写回答