【问题标题】:from kivy BoxLayout to ScreenManager using .kv file使用 .kv 文件从 kivy BoxLayout 到 ScreenManager
【发布时间】:2016-02-24 21:54:36
【问题描述】:

我在 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

上面的例子给出了错误信息:

AttributeError: 'QmHome' 对象没有属性 'elogging'

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

【问题讨论】:

  • QManager 的实例应该是根小部件
  • 您好 zeeMonkeez,感谢您的回答。所以我把 homeWin = gmHome() 改成了 homeWin = QManager()。但后来我只得到一个白屏,我希望看到 qmHome 小部件。是否还缺少细节?

标签: python screen kivy kivy-language


【解决方案1】:

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

Kivy 无法识别以小写字母命名的屏幕似乎是一个错误。

【讨论】:

    【解决方案2】:

    一些修复。 QManager 应该是根小部件,而您在 kv 文件中错过了一个

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

    在kv文件中:

    <QManager>:
        qmHome:
        EditImage:
    

    【讨论】:

    • 您好 Yoav,感谢您的回答。不幸的是,这也不起作用。现在第一个屏幕是 EditImage 屏幕而不是 qmHome 屏幕(因为 qmHome 是第一次听我期待这个作为第一个屏幕),当我单击“返回主屏幕”按钮时,我收到错误消息:kivy .uix.screenmanager.ScreenManagerException:没有名称为“home”的屏幕
    • 嗨,虽然上面的例子工作得很好,但是当把这个“框架”添加到现有的应用程序时,我得到了一些其他奇怪的行为。 AttributeError: 'QmHome' 对象在 kv 文件中没有属性 'elogging' 有: CheckBox: id: _evlogg_cb active: root.elogging 并且在 .py 文件中有: class QmonosHome(ScreenManager): elogging = BooleanProperty() I重新编辑了上面的代码,使其更清晰。请你帮忙,因为我在这里迷路了.....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多