Kivy 2.0.0 StringProperty 未被识别

Kivy 2.0.0 StringProperty not being recognized

我知道这是重复的,但没有任何答案对我有用。

我正在尝试添加一个小部件,它用作带提示的输入行。

我收到一个名称错误,指出 client.kv 的第 2 行中的 'prompt_text' 未定义。 我认为这是与 StringProperty() 不是 运行.

有关的问题

这是我的 python 文件:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.popup import Popup
from kivy.uix.label import Label
from kivy.uix.widget import Widget
import kivy.properties as kyProps


import ChatClient

CLIENT = None
VERSION = open("Version.txt").read()


class LoginWindow(Screen):
    namee = kyProps.ObjectProperty(None)
    password = kyProps.ObjectProperty(None)

    def loginBtn(self):
        global CLIENT
        CLIENT = ChatClient(self.namee.ti.text, self.password.ti.text, VERSION)
        if CLIENT.didConFail:
            errorMsg = f"Failed to connect. Reason: {CLIENT.connectFailedReason}"
            pop = Popup(title='Login Error', content=Label(text=errorMsg))
            pop.open()
        elif "REFUSED" in CLIENT.finalSetUpMsg:
            pop = Popup(title='Login Error', content=Label(text=CLIENT.finalSetUpMsg))
            pop.open()
        else:
            sm.current = "main"


class MainWindow(Screen):
    pass


class StyleEditorWindow(Screen):
    pass


class PMWindow(Screen):
    pass


class ChatWidget(Widget):
    pass


class InputLineWidget(Widget):
    prompt_text = kyProps.StringProperty("")
    ti = kyProps.ObjectProperty(None)


class WindowManager(ScreenManager):
    pass


kv = Builder.load_file("client.kv")

sm = WindowManager()

screens = [LoginWindow(name="login"), MainWindow(name="main"), StyleEditorWindow(name="styleEditor"), PMWindow(name="pm")]
for screen in screens:
    sm.add_widget(screen)
sm.current = "login"


class CpClientApp(App):
    def build(self):
        return sm


if __name__ == "__main__":
    CpClientApp().run()

这是我的 client.kv 文件:

<InputLineWidget>:
    prompt_text: prompt_text
    ti: ti
    GridLayout:
        cols: 2
        size: root.width, root.height

        Label:
            text: prompt_text

        TextInput:
            id: ti
            multiline: false

<ChatWidget>:

<LoginWindow>:
    namee: namee
    password: password

    size: root.width, root.height

    GridLayout:
        cols: 1

        InputLineWidget:
            id: namee
            prompt_text: "Name: "

        InputLineWidget:
            id: password
            prompt_text: "Password: "

        Button:
            text: "Log In"
            on_release:
                root.manager.transition.direction = "up"
                root.loginBtn()

<MainWindow>:

<StyleEditorWindow>:

<PMWindow>:

我尝试了很多基于其他遇到类似问题的解决方案,但 none 都奏效了。 使用 Kivy 2.0.0 在 Windows 10 上运行 运行ning python 3.7 任何帮助将不胜感激。谢谢。

行:

prompt_text: prompt_text

创建一个名为 prompt_textObjectProperty,它包含对 idprompt_text 的对象的引用。但由于 id 未在 kv 文件的 <InputLineWidget> 规则中定义,因此您会收到注意到的错误。

如果要将 prompt_text 用作标签的 text,请将 kv 更改为:

<InputLineWidget>:
    ti: ti
    GridLayout:
        cols: 2
        size: root.width, root.height

        Label:
            text: root.prompt_text

        TextInput:
            id: ti
            multiline: false