Kivy:把小部件放在前面

时间:2015-12-29 12:04:21

标签: python user-interface kivy

ActionBar 中的图片重叠工具栏。 (工具栏 Bubble 标签
我的代码基于this回答。

ActionBar按钮的示例:

TooltipButton:
    icon: 'images/32/quit.png'
    text: _('Quit')
    on_press: quit()

TooltipButton类:

class TooltipButton(ActionButton):
    tooltip = Tooltip()

    def __init__(self, **kwargs):
        Window.bind(mouse_pos=self.on_mouse_pos)
        super(ActionButton, self).__init__(**kwargs)

    def on_mouse_pos(self, *args):
        if not self.get_root_window():
            return
        pos = args[1]
        self.tooltip.pos = pos
        Clock.unschedule(self.display_tooltip)  # cancel scheduled event since I moved the cursor
        self.close_tooltip()  # close if it's opened
        if self.collide_point(*self.to_widget(*pos)):
            Clock.schedule_once(self.display_tooltip, 1)

    def close_tooltip(self, *args):
        self.remove_widget(self.tooltip)

    def display_tooltip(self, *args):
        self.tooltip.tip.text = self.text
        self.add_widget(self.tooltip)

工具提示规则(超类是泡泡)

<Tooltip>:
    tip: tip
    Label:
        id: tip
        text_size: self.size
        halign: 'center'
        text: 'Tip'

enter image description here

1 个答案:

答案 0 :(得分:2)

您应该add_widget()remove_widget()不是来自self(这是您的ActionButton),而是来自层次结构中较高的对象。您可以存储对ActionBar的父级的引用,也可以只使用Window对象本身:

from kivy.core.window import Window

# ...

class MyActionButton(ActionButton):
    # ...

    def close_tooltip(self, *args):
        Window.remove_widget(self.tooltip)

    def display_tooltip(self, *args):
        Window.add_widget(self.tooltip)

请注意,这可能会更改工具提示小部件的计算大小。

我更新了参考答案。