带有 kivy 布局的类

Posted

技术标签:

【中文标题】带有 kivy 布局的类【英文标题】:Classes with kivy layout 【发布时间】:2017-05-05 02:45:20 【问题描述】:

我希望使用 kivy 语言定义一个小部件,但是我想在类中添加函数。下面是我的天真尝试,当我单击带有消息“AttributeError:'MyButton' object has no attribute 'second_pressed'”的按钮时失败 如何制作具有函数和 kivy 语言定义外观的类?

import sys
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout

root = Builder.load_string('''
BoxLayout:
    Label:
        text: 'hello'
    MyButton:

<MyButton@Button>:
    text: 'Second button'
    on_press: self.second_pressed()
''')

class MyButton():
    def second_pressed():
        print "second pressed"
        sys.stdout.flush()

class Tryit(App):
    def build(self):
        return root

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

【问题讨论】:

【参考方案1】:
<MyButton@Button>:

这会动态定义一个名为MyButton 类,它与您为其添加该方法的python 代码中的MyButton 无关。

要让它工作,只写&lt;MyButton&gt;:,它表示现有类的规则。您可能还需要将 Builder.load_string 延迟到声明此类之后 - 通常最好在应用程序的 build 方法中执行此操作,因为此时可以保证所有重要的内容都已初始化。

【讨论】:

以上是关于带有 kivy 布局的类的主要内容,如果未能解决你的问题,请参考以下文章

组织 kivy 布局和类

Kivy 布局高度以适应子小部件的高度

如何在 Kivy 中设置小部件/布局的最小允许宽度/高度?

KIVY - 旋转整个布局

在 Kivy 布局上显示 OpenCV 图像结果和绘图

如何在回调时在 Kivy 布局之间切换?