трогать и воздействовать на любой объект - PullRequest
0 голосов
/ 26 октября 2019

... Как я могу дать путь к функции? Я не мог найти, как решить адресацию. Кто-нибудь есть идеи, как это исправить? Когда я нажимаю только на зеленую область, я хочу выполнить операцию с кнопкой в ​​белой области. ...

'' 'python main.py

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.relativelayout import RelativeLayout
from kivy.uix.button import Button
from kivy.properties import ObjectProperty
from kivy.uix.textinput import TextInput



class Area(RelativeLayout):
    pass

class Sec(RelativeLayout):
    """ This is white area """
    def chn(self):
        self.ids.secbut.disabled = True

class Vec(RelativeLayout):
    """ This is green area
    I want the button to disable when the green area is clicked.
    """
    def on_touch_down(self,touch):
        if self.collide_point(*touch.pos):
            Sec.ids.secbut.disabled = True

class runner(App):

    def build(self):
        self.area = Area()
        return self.area

if __name__ == "__main__":
    runner().run()

' '' ...

runner.kv

...

'' 'kivy

<Area>:
    size_hint: 1, 1
    pos_hint: {"x":0,"y":0}
    canvas:
        Color:
            rgba:0.9,0.9,0.9,1
        Rectangle:
            size:self.size    
    Sec:
    Vec:


<Sec>:
    size_hint: 1, 0.5
    pos_hint: {"x":0,"y":0}
    canvas:
        Color:
            rgba:0.9,0.8,0.7,1
        Rectangle:
            size:self.size    
    Button:
        id:secbut
        text:"click"
        size_hint:0.5,0.5

<Vec>:
    size_hint: 1, 0.5
    pos_hint: {"x":0,"y":0.5}
    canvas:
        Color:
            rgba:0.2,0.8,0.1,1
        Rectangle:
            size:self.size 

' ''

Я не мог найти, как решить адресацию.

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Довольно неловко, но вы можете сделать это, добавив id к вашему Sec следующим образом:

<Area>:
    size_hint: 1, 1
    pos_hint: {"x":0,"y":0}
    canvas:
        Color:
            rgba:0.9,0.9,0.9,1
        Rectangle:
            size:self.size    
    Sec:
        id: sec
    Vec:

Затем используйте это в своем on_touch_down() в Vec:

class Vec(RelativeLayout):
    """ This is green area
    I want the button to disable when the green area is clicked.
    """
    def on_touch_down(self,touch):
        if self.collide_point(*touch.pos):
            App.get_running_app().root.ids.sec.ids.secbut.disabled = True
0 голосов
/ 26 октября 2019

Вам нужно проверить, действительно ли касание сталкивается с областью, которая вам небезразлична.

if self.collide_point(*touch.pos):
    self.ids.secbut.disabled = True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...