【问题标题】:get current id of widget on python / kivy在 python / kivy 上获取小部件的当前 ID
【发布时间】:2016-12-16 07:36:37
【问题描述】:

我正在 kivy 上制作一种 android lock 的东西,为了画线,我需要获取鼠标所在小部件的 id,所以我在 .kv 中为每个这样的小部件分配一个 id文件:

ClickableImage:
    id: one
    source: 'button.png'
    etc.

而且我知道我可以使用

获取所有 ID(我当然有 9 个)
self.parent.ids.id

self.parent.ids['id']

但是有没有办法获取鼠标所在的 ID?还是我点击的那个?我有一个可悬停的类,所以它会检测它何时进入一个小部件,但我真的不知道如何获得它的位置,或改变它的来源。 有没有:

self.parten.ids.current

或类似的东西? 感谢您的帮助

【问题讨论】:

    标签: python kivy python-2.x


    【解决方案1】:

    您可以使用collide_widgetcollide_point 并在小部件中设置一个方法,将parent 中的变量更改为当前小部件,例如selected_widget

    if self.collide_point(*Window.mouse_pos):
        self.parent.selected_widget = self  # or its id
    

    然后你可以用它做任何事情。也许将您的逻辑放入小部件本身并直接在那里处理碰撞会更好。显然,您需要将使用上面的 if 块创建的方法绑定到诸如 on_releaseon_press 这样的事件,所以运行该方法,否则它不会做任何事情。

    您还可以从this PR 甚至从this sn-p 获得悬停行为。

    编辑:

    请注意,该 id 在小部件实例中将不可用

    这意味着self.ids.my_id.id == None,因此要真正获得id,您需要这样做:

    def find(self, parent, widget):
        for id, obj in parent.ids.items():
            if obj == widget:
                print id
                return id
    

    【讨论】:

    • 谢谢!我明白了,但是,我记得有一种方法可以从主类(App)中获取变量,我在那里声明了它,然后有一个类似“.get_running_App”之类的方法或类似的东西..(我可以'也没有发现,我认为文档不是很清楚)。你有机会知道我在说什么吗?
    • self.app = App.get_running_app() 最有可能在__init__ 方法中,然后您可以通过self.app.<thing> 基本上从App 类中获得任何东西
    • 我唯一需要做的就是获取鼠标所在的当前 id 的 id,因为当我打印 Self 或 self.id 时,我只在 0x7fa671a713d0 处得到 <__main__.clickableimage>,或者None,我怎样才能得到我当前所在的Widget的id?所以我可以将它转移到 App 中的一个变量并使用它
    猜你喜欢
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2015-07-04
    • 2014-01-21
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多