You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pygame绘制网格跨文件调用时出现TypeError问题求助

错误原因分析

你遇到的问题核心是类方法的参数定义不符合Python的面向对象规则,导致调用时参数传递完全混乱:

  • 在Python中,类的普通方法(没有@staticmethod或@classmethod装饰)默认第一个参数是类的实例对象(通常命名为self)。
  • 你定义的drawgrid方法没有声明这个参数,当你用draw.drawgrid(50)调用时,Python会自动把draw(也就是graph的实例)作为第一个参数传给drawgrid——这就导致原本的step变量实际上接收的是graph实例,而不是你传入的50。
  • 后面的x//step自然会报错,因为你试图用整数除以一个类实例,这是不支持的操作;你改成int(step)也没用,因为int()无法把类实例转换成整数。
解决方法

有两种规范的修正方式,推荐第一种(面向对象的标准写法):

方式1:将drawgrid改为实例方法(推荐)

把graph类改成需要初始化的形式,将窗口、画布尺寸作为实例属性,同时给drawgrid添加self参数:

修改grapher.py的代码:

import pygame

class graph():
    def __init__(self, win, canvas_width, canvas_height):
        self.win = win  # 保存窗口对象
        self.x = canvas_width  # 画布宽度
        self.y = canvas_height  # 画布高度

    def drawgrid(self, step, t=1):
        for i in range(0, self.x // step):
            # 绘制竖线
            pygame.draw.line(self.win, (0, 0, 255), (i*step, 0), (i*step, self.y), t)
            # 绘制横线
            pygame.draw.line(self.win, (0, 0, 255), (0, i*step), (self.x, i*step), t)
        pygame.display.update()

修改main.py的代码:

import grapher
import pygame

x = 500
y = 500  # 注意这里你之前漏了定义y变量,会直接导致报错!
win = pygame.display.set_mode((x, y))
pygame.display.set_caption("Graph")

# 初始化graph实例,传入窗口和尺寸
draw = grapher.graph(win, x, y)

run = True
while(run):
    pygame.time.delay(100)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    draw.drawgrid(50)  # 现在调用就会正确传递step参数

pygame.quit()

方式2:将drawgrid改为静态方法

如果你不想用实例化的方式,可以给drawgrid加上@staticmethod装饰器,同时把需要的win、x、y作为参数传入:

修改grapher.py的代码:

import pygame

class graph():
    @staticmethod
    def drawgrid(win, x, y, step, t=1):
        for i in range(0, x // step):
            pygame.draw.line(win, (0, 0, 255), (i*step, 0), (i*step, y), t)
            pygame.draw.line(win, (0, 0, 255), (0, i*step), (x, i*step), t)
        pygame.display.update()

修改main.py的调用代码:

# 不需要实例化,直接调用静态方法
grapher.graph.drawgrid(win, x, y, 50)

内容的提问来源于stack exchange,提问作者NotMyName

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:43:01