Python pygame.mouse.get_pressed()在我的按钮函数中无法按需要工作

Python pygame.mouse.get_pressed()在我的按钮函数中无法按需要工作,python,python-3.x,pygame,Python,Python 3.x,Pygame,作为游戏的一部分,我试图在pygame中创建一个登录页面。由于我需要按钮,我一直在尝试使用按钮功能(我在另一个教程页面上看到)。然而,当鼠标被点击时,我似乎遇到了让程序注册的问题。下面我粘贴了按钮的功能: def button(self,msg,x,y,w,h,ic,ac,action=None): mouse = pygame.mouse.get_pos() click = pygame.mouse.get_pressed() print(click) if x

作为游戏的一部分,我试图在pygame中创建一个登录页面。由于我需要按钮,我一直在尝试使用按钮功能(我在另一个教程页面上看到)。然而,当鼠标被点击时,我似乎遇到了让程序注册的问题。下面我粘贴了按钮的功能:

def button(self,msg,x,y,w,h,ic,ac,action=None):
    mouse = pygame.mouse.get_pos()
    click = pygame.mouse.get_pressed()
    print(click)
    if x+w > mouse[0] > x and y+h > mouse[1] > y:
        pygame.draw.rect(screen, ac,(x,y,w,h))
        if click[0] == 1 and action != None:
            action()         
    else:
        pygame.draw.rect(screen, ic,(x,y,w,h))
    smallText = pygame.font.Font("freesansbold.ttf",20)
    textSurf, textRect = self.text_objects(msg, smallText)
    textRect.center = ( (x+(w/2)), (y+(h/2)) )
    screen.blit(textSurf, textRect)
    pygame.display.update()

每次我运行我的程序-无论我做什么,我的按钮都是静态对象,不会改变颜色或允许任何操作运行。此外,“打印(单击)”行仅输出(0,0,0)。我正在用笔记本电脑编写这个程序,所以可能是我的触控板导致了问题?我真的不太确定,但是对于如何让这个函数工作的任何替代方案都将不胜感激

使用Pygame,您通常会在主循环中运行一个事件函数来处理所有事件

while self.playing:
    self.draw()
    self.events()
    etc...
在事件函数中,可以编写如下内容:

for event in pygame.event.get():

        # Always here to make it possible to exit when pressing X in game window:
        if event.type == pygame.QUIT:
                self.playing = False
                pygame.quit()
                quit()

        # Left mouse button down events:
        if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
            pos = pygame.mouse.get_pos()
                    if button.collidepoint(pos):
                        print('do what button is supposed to do')

希望这有帮助

你怎么称呼这个方法?您通常会有单独的逻辑来绘制按钮并检测它是否被单击,后者通常在您的事件处理中loop@IainShelvington是的,我在我的主函数中使用以下代码行调用它:self.button(“Login”,225175125,50,blockCol,blockColAfter,self.Login)self.button(“Register”,225260125,50,blockCol,blockColAfter,self.new_user)pygame.display.update()clock.tick(15)始终将代码、数据和错误消息放在问题中,而不是放在注释中-打印鼠标位置和x+w,y+h甚至
打印(x+w>鼠标[0]>x,y+h>鼠标[1]>y)更容易阅读
查看它是否为真。@Fazza通常会有一个事件处理循环来检测MOUSEBUTTONDOWN/MOUSEBUTTONUP事件。当检测到此事件时,您将遍历所有可单击的对象,确定单击了哪个对象,然后执行一些逻辑。此时,只有在方法运行的确切时间按下按钮,您才会得到该按钮