Kivy - 使用 .kv

Posted

技术标签:

【中文标题】Kivy - 使用 .kv【英文标题】:Kivy - using .kv 【发布时间】:2015-08-16 18:45:44 【问题描述】:

我正在尝试将我的小部件创建转移到 .kv 而不是我的 main.py。我怎样才能仍然引用我的 on_press 命令? Painter 是另一个子小部件,包含我要调用的函数,但是我不确定如何从 .kv 引用painter.acceptshape。

class TestingApp(App):
    def build(self):
    parent = FloatLayout()

    keepbtn = Button(pos= (10,10),text='Accept Shape',size_hint=(.25, .15),font_size=14, color=(0.960784, 1, 0.980392,1), background_normal = '',\
        background_color= ( 0.0980392, 0.0980392, 0.439216,1), font_name='Exo2-Bold.otf')

    restartbtn = Button(text='Restart',size_hint=(.2, .15),font_size=14, color=(0.960784, 1, 0.980392,1), background_normal = '',\
        background_color= (0.0980392, 0.0980392, 0.439216,1), font_name='Exo2-Bold.otf')

    renderbtn = Button(text = "Render Shape", size_hint=(.2, .15),font_size=14, color=(0.960784, 1, 0.980392,1), background_normal = '',\
        background_color= ( 0.0980392, 0.0980392, 0.439216,1), font_name='Exo2-Bold.otf')

    parent.add_widget(keepbtn)
    parent.add_widget(restartbtn)
    parent.add_widget(renderbtn)

    # if free draw option
    painter = FreeDraw()
    keepbtn.bind(on_press=painter.acceptshape)
    restartbtn.bind(on_press=painter.restart)
    renderbtn.bind(on_press=painter.render)
    parent.add_widget(painter)

    # # if preloaded box
    return parent

if __name__ == '__main__':
    TestingApp().run()

kv:

<FloatLayout>:
    canvas:
        Rectangle:
            source: 'background.jpg'
            size: self.size
            pos: self.pos

【问题讨论】:

好吧! inclement 的回答已经足够了,但是如果您仍然有疑问,那么这可能会对您有所帮助。 ***.com/questions/30202801/… 【参考方案1】:

这是一个简化的示例,展示了如何使用 id 进行操作。

BoxLayout:
    Button:
        text: 'press me'
        on_press: painter.do_something()
    FreeDraw:
        id: painter

【讨论】:

以上是关于Kivy - 使用 .kv的主要内容,如果未能解决你的问题,请参考以下文章

使用 Kivy 的时钟从 kivy 文件 (.kv) 访问不同类的 id/widget?

在 KV 语言中使用 Kivy Garden Graph

如何使用 .kv 文件在 kivy 中创建下拉列表

如何使用 KV 语言在 Kivy 中制作自定义按钮?

如何使用 kv 文件刷新 Kivy 中的 GridLayout

Kivy-kv语言VKeyboard