Kivy:Widget.on\u触摸按钮

Kivy:Widget.on\u触摸按钮,kivy,Kivy,在Mark Vasilkov-“Kivy Blueprints”第2章绘画应用程序中,小部件和按钮之间的触摸由以下代码区分(在***块中捕获。我不知道如何加粗或更改线条的颜色)。我试图从文件中理解,但无法理解上下文。请告诉我Widget.on_touch_down在按钮被触摸时如何返回,如果未触摸按钮,则绘制圆圈 # In paint.kv <CanvasWidget>: Button: text: 'Delete' right: root.right t

在Mark Vasilkov-“Kivy Blueprints”第2章绘画应用程序中,小部件和按钮之间的触摸由以下代码区分(在***块中捕获。我不知道如何加粗或更改线条的颜色)。我试图从文件中理解,但无法理解上下文。请告诉我Widget.on_touch_down在按钮被触摸时如何返回,如果未触摸按钮,则绘制圆圈

# In paint.kv
<CanvasWidget>:
  Button:
    text: 'Delete'
    right: root.right
    top: root.top
    width: 80
    height: 40
    on_release: root.clear_canvas()

# In main.py
from kivy.app import App
from kivy.config import Config
from kivy.graphics import Color, Line
from kivy.uix.widget import Widget
from kivy.utils import get_color_from_hex

class CanvasWidget(Widget):
    def on_touch_down(self, touch):
        ***if Widget.on_touch_down(self, touch): #How this check identify that the touch is on button***
           return

        with self.canvas:
            Color(*get_color_from_hex('#0080FF80'))
            Line(circle=(touch.x, touch.y, 25), width=4)

    def clear_canvas(self):
        saved = self.children[:]  # See below
        self.clear_widgets()
        self.canvas.clear()
        for widget in saved:
            self.add_widget(widget)

class PaintApp(App):
    def build(self):
        return CanvasWidget()

if __name__ == '__main__':
    Config.set('graphics', 'width', '960')
    Config.set('graphics', 'height', '540')
    Config.set('input', 'mouse',
               'mouse,disable_multitouch')

    from kivy.core.window import Window
    Window.clearcolor = get_color_from_hex('#FFFFFF')

    PaintApp().run()
#In paint.kv
:
按钮:
文本:“删除”
右:根。右
top:root.top
宽度:80
身高:40
发布时:root.clear\u canvas()
#在main.py中
从kivy.app导入应用程序
从kivy.config导入配置
从kivy.graphics导入颜色、线条
从kivy.uix.widget导入widget
从kivy.utils导入从
类画布小部件(小部件):
def on_触控向下(自身,触控):
***if Widget.on_touch_down(self,touch):#该检查如何识别触摸按钮是否处于打开状态***
返回
使用self.canvas:
颜色(*从十六进制('0080FF80')获取颜色)
线(圆=(触摸x,触摸y,25),宽度=4)
def清除画布(自身):
saved=self.children[:]#见下文
self.clear_widgets()
self.canvas.clear()
对于已保存的窗口小部件:
self.add_小部件(小部件)
类应用程序(应用程序):
def生成(自):
返回画布控件()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
Config.set('graphics'、'width'、'960')
Config.set('graphics'、'height'、'540')
Config.set('输入','鼠标',
'鼠标,禁用多点触摸')
从kivy.core.window导入窗口
Window.clearcolor=get_color_from_hex('#FFFFFF'))
PaintApp().run()

那是一本相当古老的书。我认为现在建议的方法是替换:

if Widget.on_touch_down(self, touch):
与:


两者都有相同的效果。在touch\u down()上调用超类
使
事件
touch
)通过其正常调度冒泡。如果
touch
位于
按钮上,则
按钮的
on\u touch\u down()
方法将返回
True
,这意味着
按钮已声明
事件,其他
小部件不应处理该事件。
False
返回意味着
按钮的
上的
touch\u down()
确定
上的
touch
不在
按钮上,调度应该继续。

这是一本非常古老的书。我认为现在建议的方法是替换:

if Widget.on_touch_down(self, touch):
与:


两者都有相同的效果。在touch\u down()上调用超类
使
事件
touch
)通过其正常调度冒泡。如果
touch
位于
按钮上,则
按钮的
on\u touch\u down()
方法将返回
True
,这意味着
按钮已声明
事件,其他
小部件不应处理该事件。
False
返回意味着
按钮的
on\u touch\u down()
确定
touch
不在
按钮上,应继续发送。

谢谢。但在这里,我并没有单独的按钮和画布控件。但我确实有按钮的on_释放事件触发器。那么按钮的“return True”在哪里呢?
按钮有自己的
on\u touch\u down()
由开发者编写。谢谢。但在这里,我并没有单独的按钮和画布控件。但我确实有按钮的on_释放事件触发器。那么按钮的“return True”发生在哪里呢?
按钮有自己的
on\u touch\u down()
由开发人员编写。