【问题标题】:Kivy 2.0.0 StringProperty not being recognizedKivy 2.0.0 StringProperty 无法识别
【发布时间】:2021-01-12 20:30:58
【问题描述】:

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

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

我收到一个名称错误,指出 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>:

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

【问题讨论】:

  • 发布错误时,请始终提供完整的回溯。你已经删掉了它提供的所有有用的上下文。

标签: python kivy kivy-language nameerror


【解决方案1】:

行:

prompt_text: prompt_text

创建一个名为prompt_textObjectProperty,其中包含对具有idprompt_text 的对象的引用。但由于 id 未在您的 kv 文件的 &lt;InputLineWidget&gt; 规则中定义,因此您会收到上述错误。

如果您希望将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

【讨论】:

    猜你喜欢
    • 2015-02-17
    • 2019-02-14
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多