我正在尝试使用pygame编写可以绘制线条的应用程序。该代码段如下所示-

grapher.py

some code...

x = 500

class graph():
    def drawgrid(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()


graph.drawgrid()只是绘制一个网格,每行均匀地隔开一些像素(值存储在step变量中)。

当我在同一python文件(graph.drawgrid())中运行grapher.py时,它可以按预期工作。

但是现在,我想在另一个文件(main.py)中运行该函数。该代码段如下-

main.py

import grapher
import pygame

x = 500

draw = grapher.graph()

win = pygame.display.set_mode((x, y))

pygame.display.set_caption("Graph")

run = True
while(run):
    pygame.time.delay(100)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    draw.drawgrid(50)

pygame.quit()


我调用了函数,并且该函数被调用,但是在该过程中,函数(graph.drawgrid())在被调用时也会引发以下错误-

   for i in range(0, 500//step):
TypeError: unsupported operand type(s) for //: 'int' and 'graph'


而且,当我将for i in range(0, x//step):更改为for i in range(0, x//int(step)):
现在引发此错误-

        for i in range(0, 500//int(step)):
TypeError: int() argument must be a string, a bytes-like object or a number, not 'graph'


我不知道为什么会这样,有人能告诉我我要去哪里哪里以及解决办法吗?

最佳答案

您在drawgrid函数中缺少self参数。

class graph:
def drawgrid(self, 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()


类中每个函数的第一个参数始终是调用该方法的实例。在您的情况下,您在函数定义中没有该参数,因此将其分配给step。

编辑:这是site对其进行更详细的说明。

关于python - TypeError:////'int'和'graph'不支持的操作数类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61888743/

10-13 04:54