如何在点击时修改位于独立Kivy文件中的按钮的背景颜色
解决方法
你需要先修正代码里的命名冲突,再通过层级属性访问按钮即可完成修改:
- 你当前Python代码中
easy_button同时是属性名和方法名,会触发覆盖冲突,先修改方法名避免冲突 - 在
MenuWidget对应的Python类中,把按钮声明为可外部访问的属性 - 在按钮触发的方法中直接通过已绑定的
menu_canvas访问按钮属性修改颜色
完整修改后的代码示例
Python代码部分
from kivy.uix.widget import Widget from kivy.properties import ObjectProperty # MenuWidget对应的类定义 class MenuWidget(Widget): # 绑定kv文件中id为easy_button的按钮 easy_button = ObjectProperty(None) # 主Game类定义 class Game(Widget): GAME_SPEED = 1.0 menu_canvas = ObjectProperty(None) score_widget = ObjectProperty(None) # 修改方法名避免和属性重名 def on_easy_button_press(self): self.GAME_SPEED = 0.5 # 直接修改按钮背景色,这里示例改成亮橙色,可自行替换RGBA值 self.menu_canvas.easy_button.background_color = (1, 0.6, 0, 0.85)
主KV文件部分
和原有代码逻辑一致即可,已经通过id: menu_canvas绑定了MenuWidget实例,无需额外修改。
第二个KV文件(仅修改on_press触发的方法名)
<MenuWidget>: Button: text: "Easy" font_name: "fonts/PermanentMarker-Regular.ttf" size_hint: .18, .15 background_normal: '' background_color: .5, 1, .5, .85 # 修改为调用重命名后的方法 on_press: root.parent.on_easy_button_press() pos_hint: {"x": .2, "y": .1} font_size: self.width/5.5 id: easy_button
如果后续需要修改按钮的文字、透明度、大小等其他属性,都可以通过self.menu_canvas.easy_button.属性名直接修改。
内容的提问来源于stack exchange,提问作者user16410343
相关产品推荐
相关产品推荐

