Python Kivy添加通过kv文件在py文件中定义的自定义小部件

Python Kivy添加通过kv文件在py文件中定义的自定义小部件,python,kivy,Python,Kivy,我有一个自定义按钮。我不能通过kv文件把它放在屏幕上。我研究了很多课题。找不到有用的信息。下面是一个简单的例子: from kivy.app import App from kivy.uix.button import Button from kivy.uix.boxlayout import BoxLayout from kivy.lang import Builder Builder.load_string(''' #:kivy 1.11.0 <MyGrid>: But

我有一个自定义按钮。我不能通过kv文件把它放在屏幕上。我研究了很多课题。找不到有用的信息。下面是一个简单的例子:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
Builder.load_string('''
#:kivy 1.11.0

<MyGrid>:
    Button
        text: 'hello'
''')

class MyGrid(BoxLayout):
    pass

class DropApp(App):
    def build(self):
        return MyGrid()

if __name__ == '__main__':
    DropApp().run()
构建此布局需要循环。我找不到在kv文件中构建它的方法。所以我在Py文件中定义它。但如果我在py文件中定义它,我就不能在kv文件中使用它

问题1:第二个代码有什么问题

问题2:如果我不能让它工作,我能用kvlang实现第三个代码吗(在kv文件中而不是在python中)


我是Kivy的新手,希望有人能帮我。

当我在Kivy
v1.11.1
、Python
v3.7.5
上运行代码时:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout

class DropApp(App):
    def build(self):

        layout = GridLayout(cols=1, spacing=10)
        for i in range(100):
            btn = Button(text=str(i), size_hint_y=None, height=40)
            layout.add_widget(btn)
        return layout

if __name__ == '__main__':
    DropApp().run()
输出为:

如果这是您需要的输出,请尝试运行:

pip install --upgrade kivy

对于第二段代码,python区分大小写。因此,不要使用
customButton
,而是使用
customButton


如果要使用.kv文件执行第三个代码,以下是一个示例:

from kivy.app import App

from kivy.uix.recycleview import RecycleView

from kivy.lang import Builder

Builder.load_string('''

<ExampleRV>:

    viewclass: 'Button'

    RecycleBoxLayout:

        size_hint_y: None

        height: self.minimum_height

        orientation: 'vertical'

''')

class ExampleRV(RecycleView):

    def __init__(self, **kwargs):

        super(ExampleRV, self).__init__(**kwargs)

        self.data = [{'text': str(x)} for x in range(20)]

class RecycleApp(App):

    def build(self):

        return ExampleRV()

RecycleApp().run()
从kivy.app导入应用
从kivy.uix.recycleview导入recycleview
从kivy.lang导入生成器
Builder.load_字符串(“”)
:
viewclass:“按钮”
循环利用布局:
尺寸提示:无
高度:自身最小高度
方向:“垂直”
''')
类别示例示例RV(回收查看):
定义初始(自我,**kwargs):
super(例如,self)。\uuuuuu init\uuuuuuuuu(**kwargs)
self.data=[{'text':str(x)}表示范围(20)内的x
类别:EAPP(应用程序):
def生成(自):
返回ExampleRV()
RecycleApp().run()

作为参考,当我在Kivy
v1.11.1
、Python
v3.7.5
上运行代码时:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout

class DropApp(App):
    def build(self):

        layout = GridLayout(cols=1, spacing=10)
        for i in range(100):
            btn = Button(text=str(i), size_hint_y=None, height=40)
            layout.add_widget(btn)
        return layout

if __name__ == '__main__':
    DropApp().run()
输出为:

如果这是您需要的输出,请尝试运行:

pip install --upgrade kivy

对于第二段代码,python区分大小写。因此,不要使用
customButton
,而是使用
customButton


如果要使用.kv文件执行第三个代码,以下是一个示例:

from kivy.app import App

from kivy.uix.recycleview import RecycleView

from kivy.lang import Builder

Builder.load_string('''

<ExampleRV>:

    viewclass: 'Button'

    RecycleBoxLayout:

        size_hint_y: None

        height: self.minimum_height

        orientation: 'vertical'

''')

class ExampleRV(RecycleView):

    def __init__(self, **kwargs):

        super(ExampleRV, self).__init__(**kwargs)

        self.data = [{'text': str(x)} for x in range(20)]

class RecycleApp(App):

    def build(self):

        return ExampleRV()

RecycleApp().run()
从kivy.app导入应用
从kivy.uix.recycleview导入recycleview
从kivy.lang导入生成器
Builder.load_字符串(“”)
:
viewclass:“按钮”
循环利用布局:
尺寸提示:无
高度:自身最小高度
方向:“垂直”
''')
类别示例示例RV(回收查看):
定义初始(自我,**kwargs):
super(例如,self)。\uuuuuu init\uuuuuuuuu(**kwargs)
self.data=[{'text':str(x)}表示范围(20)内的x
类别:EAPP(应用程序):
def生成(自):
返回ExampleRV()
RecycleApp().run()

作为参考,继续。

这对mehi@infinityTM很好,第二个代码在您的机器上工作吗?真不敢相信,它只是创造了很多按钮。我要告诉你,作为一个答案,你在尝试什么?按钮的scrool视图?它对mehi@infinityTM运行良好,第二个代码在您的机器上运行?真不敢相信,它只是创造了很多按钮。我要告诉你,作为一个答案,你在尝试什么?按钮的scrool视图?太棒了!谢谢顺便问一下,我可以在kv文件中指定ranger编号吗?你的代码是20。我能有一种方法把它设置成千伏吗,比如“rangeNumber:20”?我不这么认为,我会查一查!谢谢顺便问一下,我可以在kv文件中指定ranger编号吗?你的代码是20。我能不能有一种方法把它设置成千伏,比如“量程:20”?我不这么认为,我会检查一下