Я хочу сделать так, чтобы нажатие на этот виджет не нажимало на виджет позади него, позволяя по-прежнему иметь возможность нажимать на дочерние виджеты этого родительского виджета.Каждый раз, когда я добавляю что-то, чтобы прекратить событие, когда на него нажимают, оно не регистрирует щелчки на дочерних элементах виджета «контент».Если у меня его нет, то он нажимает на все, на чем моя мышь находится, накрыта она или нет.Это код для изменяемого размера подокна, который я сделал:
class SubWindow(Widget):
tPosRel = ListProperty()
bColor = ListProperty()
innerColor = ListProperty()
buttonPos = ListProperty()
innerPos = ListProperty()
innerSize = ListProperty()
def __init__(self, **kwargs):
self.innerPos = (self.pos[0] + 5, self.pos[1] + 40)
self.innerSize = (90, 265)
self.innerColor = (.2, .2, .2, 1)
self.bColor = (0, 0, 0, 1)
brightnessAvg = (self.bColor[0] + self.bColor[1] + self.bColor[2])/3.0
if brightnessAvg > .5:
self.innerColor = (kwargs["bColor"][0] - .2, kwargs["bColor"][1] - .2, kwargs["bColor"][2] - .2, 1)
else:
self.innerColor = (kwargs["bColor"][0] + .2, kwargs["bColor"][1] + .2, kwargs["bColor"][2] + .2, 1)
#print(self.innerColor)
self.buttonPos = (self.size[0] - 30, self.size[1] - 30)
#print(self.pos)
super().__init__(**kwargs)
self.innerPos = (self.pos[0] + 5, self.pos[1] + 5)
#print(self.pos)
#print(self.bColor)
#print(self.size)
self.buttonPos = (self.pos[0] + self.size[0] - 25, self.pos[1] + self.size[1] - 25)
def on_pos(self, *args):
self.innerPos = (self.pos[0] + 5, self.pos[1] + 5)
self.buttonPos = (self.pos[0] + self.size[0] - 25, self.pos[1] + self.size[1] - 25)
if self.ready:
for x in self.ids["content"].children:
x.pos = self.ids["content"].pos
#print(self.innerColor)
def on_size(self, *args):
self.innerSize = (self.size[0] - 10, self.size[1] - 45)
self.buttonPos = (self.pos[0] + self.size[0] - 25, self.pos[1] + self.size[1] - 25)
def on_touch_down(self, touch):
if not self.collide_point(*touch.pos):
return super(SubWindow, self).on_touch_down(touch)
# print(self.size)
# print("Mouse X: " + str(touch.x))
# print("Mouse Y: " + str(touch.y))
if touch.x > self.pos[0] and touch.x < self.pos[0] + self.size[0] - 30 and touch.y > self.pos[1] + self.size[
1] - 5 and touch.y < self.pos[1] + self.size[1] + 5:
self.side = 'up'
print("up hit detect...")
self.yInit = self.pos[1]
self.hInit = self.size[1]
# self.tPosRel = touch - self.pos
touch.grab(self)
return True
if touch.x > self.pos[0] + self.size[0] - 5 and touch.x < self.pos[0] + self.size[0] + 5 and touch.y > self.pos[
1] + 5 and touch.y < self.pos[1] + self.size[1] - 21:
self.side = 'right'
print("right hit detect...")
self.xInit = self.pos[0]
self.wInit = self.size[0]
touch.grab(self)
return True
if touch.x > self.pos[0] + 5 and touch.x < self.pos[0] + self.size[0] - 5 and touch.y > self.pos[
1] - 5 and touch.y < self.pos[1] + 5:
self.side = 'down'
print("down hit detect...")
self.yInit = self.pos[1]
self.hInit = self.size[1]
touch.grab(self)
return True
if touch.x > self.pos[0] - 5 and touch.x < self.pos[0] + 5 and touch.y > self.pos[1] + 5 and touch.y < self.pos[
1] + self.size[1]:
self.side = 'left'
print("left hit detect...")
#print(self.size)
self.xInit = self.pos[0]
self.wInit = self.size[0]
touch.grab(self)
return True
if touch.x > self.pos[0] and touch.x < self.pos[0] + self.size[0] - 30 and touch.y > self.pos[1] + self.size[
1] - 22 and touch.y < self.pos[1] + self.size[1] - 5:
print("top hit detect...")
self.side = 'window'
self.tPosRel = (touch.x - self.pos[0], touch.y - self.pos[1])
touch.grab(self)
return True
if touch.x > self.pos[0] - 5 and touch.x < self.pos[0] + 5 and touch.y > self.pos[1] - 5 and touch.y < self.pos[
1] + 5:
self.side = 'leftcorner'
print("left hit detect...")
#print(self.size)
self.xInit = self.pos[0]
self.wInit = self.size[0]
self.yInit = self.pos[1]
self.hInit = self.size[1]
touch.grab(self)
return True
if touch.x > self.pos[0] + self.size[0] - 5 and touch.x < self.pos[0] + self.size[0] + 5 and touch.y > self.pos[
1] - 5 and touch.y < self.pos[1] + 5:
self.side = 'rightcorner'
print("right hit detect...")
#print(self.size)
self.xInit = self.pos[0]
self.wInit = self.size[0]
self.yInit = self.pos[1]
self.hInit = self.size[1]
touch.grab(self)
return True
return super(SubWindow, self).on_touch_down(touch)
Код Kv lang:
<SubWindow>:
size_hint: (None, None)
FloatLayout:
size: root.size
pos: root.pos
size_hint: (None, None)
canvas:
Color:
rgba: root.bColor
Rectangle:
size: root.size
pos: root.pos
Button:
size: 20, 20
pos: root.buttonPos
size_hint: (None, None)
text: "X"
on_release: root.close(root)
FloatLayout:
pos: root.innerPos
size: root.innerSize
size_hint:(None, None)
id: content
canvas:
Color:
rgba: root.innerColor
Rectangle:
pos: content.pos
size: root.innerSize