Python pygame TypeError:Rect参数无效

Python pygame TypeError:Rect参数无效,python,sockets,server,pycharm,Python,Sockets,Server,Pycharm,我已经阅读了许多与我相同问题的帖子,但没有找到任何解决我问题的方法,所以我决定在这里提问。我目前正在跟踪。在1:01:58,当他运行时,没有出现错误,但我收到了上面标题中的错误: Traceback (most recent call last): File "C:/Users/User/PycharmProjects/networkTutorial1/client.py", line 80, in <module> main() File &qu

我已经阅读了许多与我相同问题的帖子,但没有找到任何解决我问题的方法,所以我决定在这里提问。我目前正在跟踪。在1:01:58,当他运行时,没有出现错误,但我收到了上面标题中的错误:

Traceback (most recent call last):
  File "C:/Users/User/PycharmProjects/networkTutorial1/client.py", line 80, in <module>
    main()
  File "C:/Users/User/PycharmProjects/networkTutorial1/client.py", line 78, in main
    redrawWindow(win,p,p2)
  File "C:/Users/User/PycharmProjects/networkTutorial1/client.py", line 54, in redrawWindow
    player2.draw(win)
  File "C:/Users/User/PycharmProjects/networkTutorial1/client.py", line 22, in draw
    pygame.draw.rect(win, self.colour, self.rect)
TypeError: Rect argument is invalid

感谢您花时间阅读此问题并帮助我解决。

原来我在
n.send
第67行之前缺少了一个
read\u pos
,问题现在已解决。我遇到了另一个问题,但在这个问题解决后,我将打开一个新问题。

请重复介绍教程中的内容。仅提取重现问题所需的代码;给我们一个值跟踪和完整的错误消息。@Prune,我已经包含了所有文件交互时的代码,因此可能会影响导致错误的代码。不幸的是,我对这个特定的结构了解不够,不知道如何减少内容,因为必须先运行server.py,然后才能运行client.py,但是client.py也引用network.py。根据该链接,应包括引用文件,以防错误位于意外位置。至于值跟踪和错误消息,我不确定您的意思,因为我已经在控制台中复制了文本。
import pygame
from network import Network

width = 500
height = 500
win = pygame.display.set_mode((width, height))
pygame.display.set_caption("Client")

clientNumber = 0

class Player():
    def __init__(self, x, y, width, height, colour) :
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.colour = colour
        self.rect = (x,y,width,height)
        self.vel = 3

    def draw(self, win):
        pygame.draw.rect(win, self.colour, self.rect)

    def move(self):
        keys = pygame.key.get_pressed()

        if keys[pygame.K_LEFT]:
            self.x -= self.vel

        if keys[pygame.K_RIGHT]:
            self.x += self.vel

        if keys[pygame.K_UP]:
            self.y -= self.vel

        if keys[pygame.K_DOWN]:
            self.y += self.vel

        self.update()

    def update(self):
        self.rect = (self.x, self.y, self.width, self.height)

def read_pos(str):
    str = str.split(",")
    return int(str[0]), int(str[1])

def make_pos(tup):
    return str(tup[0]) + "," + str(tup[1])

def redrawWindow(win,player,player2):
    win.fill((255,255,255))
    player.draw(win)
    player2.draw(win)
    pygame.display.update()

def main():
    run = True
    n = Network()
    startPos = read_pos(n.getPos())
    p = Player(startPos[0],startPos[1],100,100,(0,255,0))
    p2 = Player(0,0,100,100,(0,255,0))
    clock = pygame.time.Clock()

    while run:
        clock.tick(60)
        p2Pos = n.send(make_pos((p.x, p.y)))
        p2.x = p2Pos[0]
        p2.y = p2Pos[1]
        p2.update()

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

        p.move()
        redrawWindow(win,p,p2)

main()
import socket
from _thread import *
import sys

server = "192.168.1.72"
port = 5555

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    s.bind((server, port))
except socket.error as e:
    str(e)

s.listen(2) #max clients on server
print("Waiting for a connection, Server Started")

def read_pos(str):
    str = str.split(",")
    return int(str[0]), int(str[1])

def make_pos(tup):
    return (str(tup[0]) + "," + str(tup[1]))

pos = [(0,0),(100,100)]

def threaded_client(conn, player):
    conn.send(str.encode(make_pos(pos[player])))
    reply = ""
    while True:
        try:
            data = read_pos(conn.recv(2048).decode())
            pos[player] = data

            if not data:
                print("Disconnected")
                break
            else:
                if player == 1:
                    reply = pos[0]
                else:
                    reply = pos[1]

                print("Received:", data)
                print("Sending:", reply)

            conn.sendall(str.encode(make_pos(reply)))
        except:
            break

    print("Lost connection")
    conn.close()

currentPlayer = 0
while True:
    conn, addr = s.accept()
    print("Connected to:", addr)

    start_new_thread(threaded_client, (conn, currentPlayer))
    currentPlayer += 1
import socket

class Network:
    def __init__(self):
        self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server = "192.168.1.72"
        self.port = 5555
        self.addr = (self.server, self.port)
        self.pos = self.connect()

    def getPos(self):
        return self.pos

    def connect(self):
        try:
            self.client.connect(self.addr)
            return self.client.recv(2048).decode()
        except:
            pass

    def send(self, data):
        try:
            self.client.send(str.encode(data))
            return self.client.recv(2048).decode()
        except socket.error as e:
            print(e)