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)