从kivy BoxLayout到使用.kv文件的ScreenManager

时间:2016-02-24 21:54:36

标签: python screen kivy kivy-language

我在BoxLayout中有一个带有1个屏幕的应用程序(文件名为qmscreens.py)。

from kivy.app import App
from kivy.core.window import Window

class qmHome(BoxLayout):
    pass  

class qmscreensApp(App):
    def build(self):
        Window.clearcolor = (1,1,1,1)
        Window.size = (500, 500)
        homeWin = qmHome()
        return homeWin

qmscreensApp().run()

以下示例按照建议实施了更改。

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen

class EditImage(Screen):
    pass

class QmHome(Screen):
    pass

class QManager(ScreenManager):
    elogging = BooleanProperty()

    elogging = True
    # and a lot of other python code here below


class qmscreensApp(App):
    def build(self):
        Window.clearcolor = (1,1,1,1)
        Window.size = (500, 500)
        homeWin = QManager()
        return homeWin

qmscreensApp().run()

以及以下qmscreens.kv文件:

QManager:
    QmHome:
    EditImage:

<QmHome>:
    name: 'home'
    Button:
        on_press: app.root.current = 'edit'
        text: 'to edit screen'
        font_size: 50

<EditImage>:
    name: 'edit'
    Button:
        on_release: app.root.current = 'home'
        text: 'back to the home screen'
        font_size: 50

    CheckBox:
        id: _evlogg_cb
        active: root.elogging

上面的示例给出了错误消息:

  

属性错误:&#39; QmHome&#39;对象没有属性&#39; elogging&#39;

我想代码行elogging = BooleanProperty()应该从QManager更改为QmHome类。但后来我得到了其他错误。所以我完全迷失了。非常感谢您的帮助和指示。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

很少有修复。 QManager应该是根小部件而你错过了&lt;&gt;在kv文件中

def build(self):
    Window.clearcolor = (1,1,1,1)
    Window.size = (500, 500)
    #homeWin = qmHome()
    return QManager() # <---- :)

在kv文件中:

<QManager>:
    qmHome:
    EditImage:

答案 1 :(得分:0)

将所有出现的课程qmHome重命名为QmHome。按照惯例,跨越许多不同的语言,类的开头应始终以大写字母开头。

Kivy没有意识到用小写命名的屏幕似乎是一个错误。