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