PyGame: draw.rect() has invalid parameters

2024/7/8 6:47:44

I'm trying to learn mouse events with PyGame, and I'm trying to draw a box wherever the user clicks. I'm setting a variable equal to pygame.mouse.get_pos(), and calling individual tuple members according to the mouse's x, y position. Here's the code:

import pygame, syspygame.init()
screen = pygame.display.set_mode((800, 600))mousepos = pygame.mouse.get_pos()while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()if event.type == pygame.MOUSEBUTTONDOWN:pygame.draw.rect(mousepos[0], mousepos[1], 20, 20)

The game starts up, but when I click, it crashes, giving this error:

Traceback (most recent call last):File "C:\Users\User\Documents\proj\Python\mouse.py", line 13, in <module>pygame.draw.rect(mousepos[0], mousepos[1], 20, 20)
TypeError: must be pygame.Surface, not int

I know what I'm doing wrong: my parameters for draw.rect() are of invalid types, but I don't know how to change the parameters so they're appropriate. So how do I fix this?

Answer

Lets take a look at the function definition:

pygame.draw.rect(Surface, Color, Rect, Thickness)
  • Surface is a surface where you want to draw
  • Color is a tupple with RGB values defining the color to be used
  • Rect is a tupple in the format: (x,y,width,height)
    • x,y are the coordinates of the upper left hand corner
    • width, height are the width and height of the rectangle
  • Thickness is the thickness of the line. If it is zero, the rectangle is filled.

Based on this, you shoud do something like:

redColor = (255,0,0)
pygame.draw.rect(screen, redColor, (mousepos[0], mousepos[1], 20, 20), 1)

Sources:

The official documentation for python.draw can be found here:
http://www.pygame.org/docs/ref/draw.html

Mind the usefull Search examples for <function> button under every function description, which can lead you to multiple real world examples of usage.

Useful tutorials can also be found on the official pages: http://www.pygame.org/wiki/tutorials

Other unofficial tutorials, like this one, can be found with a bit of Googling effort.

https://en.xdnf.cn/q/119529.html

Related Q&A

Cant press enter in selenium2library

Im trying to make a test that will open Facebook, log in and search something. However Im having trouble getting Facebook to search. Selenium types whatever it needs in the search bar, but I cant find …

Converting string to datetime in Python using strptime

Im trying to convert the following String to datetime object in Python.datetime_object = datetime.strptime(Sat, 26 Nov 2016 15:17:00 +0000, %a, %b %d %Y %H:%c %z)I get the following error,File "&l…

Is there any differences between python2 and python3 about adding menu bar to Frame in tkinter?

Im trying to porting a project 2to3 on python, and stuck in tkinter.In python2, there is no problem with adding menu bar to Frame in tkinter,but python3 occured attribute error. (Frame object has no at…

Standard Input having weird characters with them in different programming lanuage

I am getting confused with the standard input of these programming languages : [Note:] I added details about so many programming languages as the problem with all of them is same in this matter and my …

How to turn a numpy array to a numpy object?

I have a NumPy array as follows: [[[ 0 0]][[ 0 479]][[639 479]][[639 0]]]and I would like to convert it into something like so: [( 0 0)( 0 479)(639 479)(639 0), dtype=dtype([(x, <i2), (y…

recover all line from an attribute in a database in json

To simplify my problem, I have a base in json, and I recover all of my lines of json to put informations in a base. It seems easy for moments, but problem is that my json is not correctly writtenSo i…

Calculate eigen value in python as same way(order) in Matlab

This is the Matlab code which is returning eigenvector in V and eigenvalue in D. Consider C is 9*9 matrix then V is 9*9 matrix and D is 9*9 diagonal. matrix.[V,D] = eig(C);I want the same thing in Pyth…

Python: ctypes and Pointer to Structure

I am trying to make a pointer of a struct and then de-reference it. But its crashing. I have mimiced the behvior here with this simple code. from ctypes import * import ctypesclass File(Structure):_fie…

Python:Why readline() function doesnt work for file looping

I have the following code:#!/usr/bin/pythonf = open(file,r)for line in f:print line print Next line , f.readline() f.close()This gives the following output:This is the first lineNext line That was the …

How to replace cropped rectangle in opencv?

I have managed to cropped a bounding box with text, e.g. given this image:Im able to exact the following box:with this code: import re import shutilfrom IPython.display import Imageimport requests impo…