python - kivy.uix.behaviors.TouchRippleButtonBehavior 的 on_release 不起作用
问题描述
我有一个继承自 kivy.uix.behaviors.TouchRippleButtonBehavior的 boxlayout ,并且涟漪效果很好,但是,当我定义一个 'on_press' 或 'on_release' 时,函数永远不会运行。kivy.uix.behaviors.ButtonBehavior 也是如此,这是为什么呢?我的代码片段:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.behaviors import TouchRippleButtonBehavior
from kivy.graphics import Color, Rectangle
class RippleBox(TouchRippleButtonBehavior, BoxLayout):
def __init__(self, **kwargs):
super(RippleBox, self).__init__(**kwargs)
with self.canvas.before:
Color(.5, .5, .5, 1, mode='rgba')
self._rectangle = Rectangle(size=self.size, pos=self.pos)
def on_release(self): # also tried passing '*args' as an argument, did not change anything
print("got clicked!")
def on_size(self, *args):
self._rectangle.size = self.size
self._rectangle.pos = self.pos
def on_touch_down(self, touch):
collide_point = self.collide_point(touch.x, touch.y)
if collide_point:
touch.grab(self)
self.ripple_show(touch)
return True
return False
def on_touch_up(self, touch):
if touch.grab_current is self:
touch.ungrab(self)
self.ripple_fade()
return True
return False
class MainApp(App):
def build(self):
return RippleBox()
if __name__ == "__main__":
MainApp().run()
解决方案
当您定义任何on_touch_down()
oron_touch_up()
方法时,您将on_touch_down()
覆盖. 调度事件的方法,但如果它永远不会被调用,则不能这样做。这些方法还执行您的方法调用的and 。通常,当您重新定义这些方法时,您应该调用,如下所示:on_touch_up()
TouchRippleButtonBehavior
on_touch_up()
TouchRippleButtonBehavior
on_release
TouchRippleButtonBehavior
self.ripple_show()
self.ripple_fade()
super()
super(RippleBox, self).on_touch_down(touch)
推荐阅读
- mysql - SQL - 查询期间的条件
- javascript - 将符号导出为“module.exports”,但在 TypeScript 中保留类型声明
- python - 连接WiFi python的最简单方法
- python - Google Analytics API 分页循环未结束且未更新新请求中的 pageToken 值 - Python
- typescript - 当用户在 Angular 中删除数据库中的项目时更新 UI 的最佳方法
- c# - 当 MaxDegreeOfParallelism > 1 时,Parallel.For 的 localInit 和 localFinally 等效用于 TPL 数据流块
- laravel - Laravel 5.7 在刀片中显示来自公共存储的图像
- wildfly - 如何使用 java 11 部署wildfly 15?
- java - org.eclipse.jetty.server.ssl.SslSelectChannelConnector 在新的 Eclipse Jetty 罐子中丢失
- scala - Gatling tansformOption 类型不匹配