Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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 如何在PyGame中实现选项按钮和更改按钮颜色?_Python_Pygame - Fatal编程技术网

Python 如何在PyGame中实现选项按钮和更改按钮颜色?

Python 如何在PyGame中实现选项按钮和更改按钮颜色?,python,pygame,Python,Pygame,请建议当我按下按钮时如何更改按钮的颜色,当我按下第二个按钮时,第一个按钮的颜色将更改为默认颜色 例如,单击“直”按钮后,按钮将变为绿色,单击“左”按钮时,左按钮将变为绿色,而“直”按钮将变为默认颜色,即白色。提前感谢:) 代码: your_button_rect=pygame.rect(x,y,width,height) 颜色=(0,0,0) pos=pygame.mouse.get_pos() def更改按钮颜色() 如果您的按钮正确碰撞(位置): if event.type==pygame

请建议当我按下按钮时如何更改按钮的颜色,当我按下第二个按钮时,第一个按钮的颜色将更改为默认颜色

例如,单击“直”按钮后,按钮将变为绿色,单击“左”按钮时,左按钮将变为绿色,而“直”按钮将变为默认颜色,即白色。提前感谢:)

代码:

your_button_rect=pygame.rect(x,y,width,height)
颜色=(0,0,0)
pos=pygame.mouse.get_pos()
def更改按钮颜色()
如果您的按钮正确碰撞(位置):
if event.type==pygame.MOUSEBUTTONDOWN:#检查光标位于矩形上时是否按下鼠标按钮
颜色=(您所需的颜色值)
尽管如此:
pygame.draw.rect(屏幕、颜色、您的按钮)
更改按钮颜色()

绘制按钮时,必须根据单击的全局变量
设置颜色:

def draw_按钮(自):
全球点击
#获取鼠标位置
pos=pygame.mouse.get_pos()
#为按钮创建pygame Rect对象
按钮_rect=rect(self.x、self.y、self.width、self.height)
#检查鼠标悬停和单击条件
悬停=按钮右碰撞点(位置)
如果鼠标悬停并按下pygame.mouse.get_()[0]==1:
单击=未单击
颜色=自身按钮颜色
如果单击:
颜色=自身。单击颜色
elif悬停:
颜色=self.hover\u col
pygame.draw.rect(屏幕、颜色、按钮)
无论如何,这不会让您满意,因为它返回一个布尔值列表​​表示所有鼠标按钮的状态(
True
False
)。只要按下按钮,按钮的状态就是
True

您必须使用
MOUSEBUTTONDOWN
事件。单击鼠标按钮时,
MOUSEBUTTONDOWN
事件发生一次,松开鼠标按钮时,
MOUSEBUTTONUP
事件发生一次。该对象有两个属性,提供有关鼠标事件的信息
pos
是存储单击位置的元组<代码>按钮
存储单击的按钮


如果您有多个按钮需要相互交互,那么单击一个
状态是不够的。每个按钮都需要单独的“单击”状态。如果单击1按钮的状态变为
True
,则其他按键的状态必须设置为
False
。我建议为此实现一个
RadioButton

另见和

最简单的例子:

导入pygame
类单选按钮(pygame.sprite.sprite):
定义初始化(self、x、y、w、h、字体、文本):
super()。\uuuu init\uuuuu()
text\u surf=font.render(text,True,(0,0,0))
self.button_image=pygame.Surface((w,h))
自我按钮\图像填充((96,96,96))
self.button\u image.blit(text\u surf,text\u surf.get\u rect(center=(w//2,h//2)))
self.hover_image=pygame.Surface((w,h))
自我悬停图片填充((96,96,96))
self.hover\u image.blit(text\u surf,text\u surf.get\u rect(center=(w//2,h//2)))
pygame.draw.rect(self.hover_image,(9619696),self.hover_image.get_rect(),3)
self.clicked_image=pygame.Surface((w,h))
自点击图片填充((9619696))
self.clicked_image.blit(text_surf,text_surf.get_rect(center=(w//2,h//2)))
self.image=self.button\u image
self.rect=pygame.rect(x,y,w,h)
self.clicked=False
self.buttons=无
def setRadioButtons(自身,按钮):
self.buttons=按钮
def更新(自身、事件列表):
hover=self.rect.collidepoint(pygame.mouse.get_pos())
对于事件列表中的事件:
如果event.type==pygame.MOUSEBUTTONDOWN:
如果悬停且event.button==1:
对于self.button中的rb:
rb.clicked=False
self.clicked=True
self.image=self.button\u image
如果单击self.click:
self.image=self.clicked\u image
elif悬停:
self.image=self.hover\u image
pygame.init()
window=pygame.display.set_模式((300300))
clock=pygame.time.clock()
font50=pygame.font.SysFont(无,50)
单选按钮=[
单选按钮(50、40、200、60、50,“选项1”),
单选按钮(50、120、200、60、50,“选项2”),
单选按钮(50、200、200、60、50,“选项3”)
]
对于rb in单选按钮:
rb.设置单选按钮(单选按钮)
单选按钮[0]。单击=真
group=pygame.sprite.group(单选按钮)
运行=真
运行时:
时钟滴答(60)
event_list=pygame.event.get()
对于事件列表中的事件:
如果event.type==pygame.QUIT:
运行=错误
组更新(事件列表)
窗口填充(0)
组图(窗口)
pygame.display.flip()
pygame.quit()
退出()

这是否回答了您的问题?thx都德它的作品@成峰谢谢你。不客气。
def draw_button(self):

    global clicked
    action = False

    # get mouse position
    pos = pygame.mouse.get_pos()

    # create pygame Rect object for the button
    button_rect = Rect(self.x, self.y, self.width, self.height)

    # check mouseover and clicked conditions
    if button_rect.collidepoint(pos):
        if pygame.mouse.get_pressed()[0] == 1:
            clicked = True
            pygame.draw.rect(screen, self.click_col, button_rect)
        elif pygame.mouse.get_pressed()[0] == 0 and clicked == True:
            clicked = False
            action = True
           
        else:
            pygame.draw.rect(screen, self.hover_col, button_rect)
    else:
        pygame.draw.rect(screen, self.button_col, button_rect)