Python 其他小部件下面的Kivy小部件是可交互的,如何防止这种情况?
考虑一个应用程序,它包含一个Python 其他小部件下面的Kivy小部件是可交互的,如何防止这种情况?,python,kivy,kivy-language,Python,Kivy,Kivy Language,考虑一个应用程序,它包含一个RelativeLayout中的按钮。如果除按钮外的任何小部件被放置在其顶部,从而隐藏了按钮,则此按钮和RelativeLayout的任何其他子项将可交互,即使它不可见 可以采取哪些措施来强制实现此功能 下面是一个例子:请注意,尽管完全隐藏,但应用程序中心的按钮仍然接收触摸事件: from kivy.app import App from kivy.uix.relativelayout import RelativeLayout from kivy.uix.butto
RelativeLayout
中的按钮。如果除按钮外的任何小部件被放置在其顶部,从而隐藏了按钮,则此按钮和RelativeLayout
的任何其他子项将可交互,即使它不可见
可以采取哪些措施来强制实现此功能
下面是一个例子:请注意,尽管完全隐藏,但应用程序中心的按钮仍然接收触摸事件:
from kivy.app import App
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.button import Button
from kivy.graphics import *
from kivy.core.window import Window
from kivy.uix.widget import Widget
class MyApp(App):
def build(self):
def btn_pressed(instance):
print('ok')
root = RelativeLayout()
button = Button()
root.add_widget(button)
button.size_hint = (None, None)
button.pos_hint = {'center_x': 0.5, 'center_y': 0.5}
button.bind(on_press=btn_pressed)
layout = RelativeLayout()
with layout.canvas:
Color(0,0,0,1)
Rectangle(size=(Window.size[0], Window.size[1]))
root.add_widget(layout)
return root
MyApp().run() ```
大多数小部件的默认行为是允许继续调度触摸事件。这由\u touch\u XXX()上的
方法的返回值控制。返回的True
表示“不继续调度”,返回的False
表示“继续调度”。因此,您可以通过定义一个停止调度的自定义类来停止touch\u down
事件的调度。例如:
class MyTouchBlocker(RelativeLayout):
def on_touch_down(self, touch):
if self.collide_point(*touch.pos):
return True
else:
return super(MyTouchBlocker, self).on_touch_down(touch)
在代码中,您可以替换:
layout = RelativeLayout()
与:
看
layout = MyTouchBlocker()