Kivy声明后数据无效

1 投票
2 回答
8625 浏览
提问于 2025-04-18 01:21

我不明白为什么在运行我的代码时会出现这种错误。我检查了好几遍,感觉一切都没问题,但代码就是不想运行。

这是我的 __main__.py 文件:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.anchorlayout import AnchorLayout
from kivy.properties import ObjectProperty  # at top of file

class AccountDetailsForm(AnchorLayout):

    server_box = ObjectProperty()
    username_box = ObjectProperty()
    password_box = ObjectProperty()

    def login(self):
        print(self.server_box.text)
        print(self.username_box.text)
        print(self.password_box.text)


class Orkiv(App):
    pass

Orkiv().run()

这是我的 orkiv.kv 文件:

AccountDetailsForm:

<AccountDetailsForm>:
    anchor_y: "top"
    server_box: server_input
    username_box: username_input
    password_box: password_input

    BoxLayout:
        orientation: "vertical"
        height: "200dp"
        size_hint_y: None

        GridLayout:
            cols: 2
            row_default_height: "40dp"
            row_force_default: True
            spacing: "10dp"
            padding: "10dp"
        Label:
            text: "Server" //THE ERROR SEEMS TO HAPPEN HERE
        AccountDetailsTextInput:
            id: server_input
        Label:
            text: "Username"
        AccountDetailsTextInput:
            id: username_input
        Label:
            text: "Password"
        AccountDetailsTextInput:
            password: True
            id: password_input

    Button:
        size_hint_y: None
        height: "40dp"
        text: "Login"
        on_press: root.login()

有没有什么想法?谢谢。

2 个回答

0

根据kivy模块的说明,如果你想要一个可以编辑普通文本的框,可以使用“TextInput”这个类。

3

在你的 orkiv.kv 文件中,把 AccountDetailsTextInput 改成 TextInput 就可以了。

AccountDetailsForm:

<AccountDetailsForm>:

    anchor_y: "top"
    server_box: server_input
    username_box: username_input
    password_box: password_input

    BoxLayout:

        orientation: "vertical"
        height: "200dp"
        size_hint_y: None

        GridLayout:
            cols: 2
            row_default_height: "40dp"
            row_force_default: True
            spacing: "10dp"
            padding: "10dp"

        Label:
            text: "Server"

        TextInput:
            id: server_input

        Label:
            text: "Username"

        TextInput:
            id: username_input

        Label:
            text: "Password"

        TextInput:
            password: True
            id: password_input

    Button:

        size_hint_y: None
        height: "40dp"
        text: "Login"
        on_press: root.login()

这样应用就应该能正常运行了。看看我下面的输出。

在这里输入图片描述

如果这样有帮助,请告诉我们。

撰写回答