【问题标题】:return a BoxLayout inside another one in Kivy?在 Kivy 的另一个里面返回一个 BoxLayout?
【发布时间】:2017-01-03 08:03:05
【问题描述】:

我正在尝试在 Python 3.5 和 kivy 中创建一个简单的应用程序,该应用程序从一个简单的屏幕开始,当您单击它时,会转到另一个显示 3 个列表的列表,让您选择数据:

Python 文件:

from kivy.app import App

from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition

from kivy.uix.boxlayout import BoxLayout
from kivy.uix.listview import ListItemButton
from kivy.properties import ListProperty
from dataTopy import rlists

# Transition des ecrans:
class MainScreen(Screen):
    pass

class AnotherScreen(Screen):
    pass

class ScreenManagement(ScreenManager):
    pass

presentation = Builder.load_file("ex44.kv")

# 
class FirstListItemButton(ListItemButton):
    pass

class SecondListItemButton(ListItemButton):
    pass

class ThirdListItemButton(ListItemButton):
    pass


class Ex44(BoxLayout):
    d1 = ListProperty([str(i) for i in range(1990,2014)] )
    d2 = ListProperty(['']*100)
    d3 = ListProperty(['']*100)
    def change(self,c):
        try: self.d2,self.d3 = rlists(int(c.text))
        except:
            import os
            CurDir = os.getcwd()
            print('Can not find data in ' + CurDir) 
    def change1(self,c):
        print('M => '+c.text)
    def change2(self,c):
        print('F => '+c.text)

class Ex44App(App):

    def build(self):
        return presentation

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

kivy 文件:

#: import FadeTransition kivy.uix.screenmanager.FadeTransition

#: import ListAdapter kivy.adapters.listadapter.ListAdapter
#: import ex44 ex44

ScreenManagement:
    transition: FadeTransition()
    MainScreen:
    AnotherScreen:

<MainScreen>:
    name: "main"
    Button:
        on_release: app.root.current = "other"
        text: "Next Screen"
        font_size: 50

<AnotherScreen>:
    name: "other"
    BoxLayout:
        Ex44
        Button:
            color: 0,1,0,1
            font_size: 25
            size_hint: 0.3,0.2
            text: "Back Home"
            on_release: app.root.current = "main"
            pos_hint: {"right":1, "top":1}

<FirstListItemButton>:
    on_press: app.root.change(*args)

<SecondListItemButton>:
    on_press: app.root.change1(*args)

<ThirdListItemButton>:
    on_press: app.root.change2(*args)


<Ex44>:
    ListView:
        adapter:
            ListAdapter(data=root.d1,
            selection_mode='single',
            cls=ex44.FirstListItemButton)
    ListView:
        adapter:
            ListAdapter(data=root.d2,
            selection_mode='single',
            cls=ex44.SecondListItemButton)
    ListView:
        adapter:
            ListAdapter(data=root.d3,
            selection_mode='single',
            cls=ex44.ThirdListItemButton)

当我尝试运行该应用程序时,它告诉我:“未知类” 这很奇怪,因为 Ex44 类单独工作,但当我试图将它添加到主应用程序逻辑中时却不行。 我尝试为该类返回一个小部件而不是 BoxLayout,在 kivy 文件中单独返回 Ex44,等等,但我总是得到同样的错误。

是否可以在 Kivy 中的另一个 BoxLayout 中返回一个 BoxLayout?

【问题讨论】:

    标签: python-3.x kivy


    【解决方案1】:

    您正在构建 kv 文件太快(在定义类之前)。将 Builder.from_file 调用移至 build 方法

    ...
    def build(self):
        return Builder.load_file("ex44.kv")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-08
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      相关资源
      最近更新 更多