Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何修复按钮模块_Python_Pygame - Fatal编程技术网

Python 如何修复按钮模块

Python 如何修复按钮模块,python,pygame,Python,Pygame,我试图为一个按钮编写一个模块,这样我就不必经常重写代码,但我一直遇到同样的问题 import pygame,sys 进口tkinter 从集合导入计数器作为计数 从pygame.locals导入* 点击=布尔 pygame.init() mainClock=pygame.time.Clock() pygame.display.set_标题('信用卡') screen=pygame.display.set_模式((1200800),0,32) windowSurface=pygame.displa

我试图为一个按钮编写一个模块,这样我就不必经常重写代码,但我一直遇到同样的问题

import pygame,sys
进口tkinter
从集合导入计数器作为计数
从pygame.locals导入*
点击=布尔
pygame.init()
mainClock=pygame.time.Clock()
pygame.display.set_标题('信用卡')
screen=pygame.display.set_模式((1200800),0,32)
windowSurface=pygame.display.set_模式((1200650),pygame.DOUBLEBUF)
font=pygame.font.SysFont(无,35)
font2=pygame.font.SysFont(无,20)
ic=pygame.Color(“灰色15”)
ac=pygame.Color(25255,25)
PinNumber=“”
input_rect=pygame.rect(25,25,25,25)
Color=pygame.Color('gray15')
keys=pygame.key.get_pressed()
单击=pygame.MOUSEBUTTONDOWN
def卡():
全局单击
全球色彩
全局字体
全局羽数
def按钮(数字、X、Y、W、H、动作):
mouse=pygame.mouse.get_pos()
click=pygame.mouse.get_pressed()
如果event.type==MOUSEBUTTONDOWN:
如果event.button==1:
单击=真
button_Num=pygame.Rect(X,Y,W,H)
如果按钮数量碰撞点(鼠标):
如果pygame.mouse.get_按下():
对于第2部分中的i:
行动
i=i+1
mx,my=pygame.mouse.get_pos()
尽管如此:
对于pygame.event.get()中的事件:
如果event.type==退出:
打印(“退出”)
pygame.quit()
sys.exit()
#将输入直接更改为所需的框
如果event.type==单击:
如果输入直接碰撞点(事件位置):
打印(“单击”)
按钮(1,30,30100100,打印(“点击按钮”))
如果event.type==KEYDOWN:
如果event.key==K_转义:
pygame.quit()
sys.exit()
屏幕填充((255255))
Image\u load=pygame.Image.load(“Card\u Scanner.jpg”)
Image\u load=pygame.transform.scale(Image\u load,(303534))
屏幕。blit(图像加载,(90,90))
单击=False
pygame.display.update()
主时钟。滴答声(60)
def Quit():
运行=真
运行时:
pygame.quit()
pygame.display.update()
主时钟。滴答声(60)
卡片()
pygame.quit()
sys.exit()
运行此操作时,它不会在鼠标移动时停止打印单击的按钮 我还试着运行其他在线发现的例子来解决同样的问题
非常感谢您的帮助。谢谢

您无法传递被调用的函数。通过传递
print(“Clicked Button”)
您真正要做的是打印“Clicked Button”,然后传递函数的结果(无)。相反,您需要做的是传递action函数本身和action函数的参数,然后从button函数内部调用action函数

这是一个基本的例子

#                                 unnamed params  named params
def any_function(action_function, action_args=[], action_kwargs={}):
  # This will call the action function
  action_function(*action_args, **action_kwargs)


# What you are looking for
any_function(print, ["Clicked Button"])

# Example using `action_kwargs`
any_function(print, ["Clicked Button"], {"end": " "})
在按钮函数中实现

def button(Num, X, Y, W, H, Action, Action_args=[], Action_kwargs={}):
        mouse = pygame.mouse.get_pos()
        click = pygame.mouse.get_pressed()
        if event.type == MOUSEBUTTONDOWN:
            if event.button == 1:
                click = True

        button_Num = pygame.Rect(X, Y, W, H)

        if button_Num.collidepoint(mouse):
            if pygame.mouse.get_pressed():
                for i in 2:
                    Action(*Action_args, **Action_kwargs)
                    i=i+1

您好,我试过这个,但当鼠标悬停在上面时,它仍然保持打印按钮单击。我相信您的问题在于使用
pygame.mouse.get_pressed()
。我建议将操作调用放在
if event.type==MOUSEBUTTONDOWN:
下,如果您想看到我按下了鼠标。
button(1,30,30,100, 100, print, ["Clicked Button"])