无法在 MDGridLayout 中添加 kivymd 的 MDTextField

Unable to add kivymd's MDTextField in MDGridLayout

我是 kivy 框架的新手,但是我正在尝试制作一个简单的登录屏幕,其中会有一个文本字段和一个按钮

我的Python代码是:

from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen,\
                                    ScreenManager

from kivy.lang import Builder

class Project (MDApp):
    def build (self):
        return Builder.load_file('main.kv')
    
Project().run()

main.kv文件是:

Screen:
    MDBoxLayout:
        orientation:'vertical'
        md_bg_color:1,0,0,1
        MDToolbar:
        MDGridLayout:
            cols:1
            adaptive_height: True
            MDLabel:
                text:'Manic'
                halign:'center'
            MDTextField:

我收到以下错误:

[INFO ] [Logger ] Record log in /storage/emulated/0/@tsmile/projects/pro_two/.kivy/logs/kivy_21-03-19_38.txt
[INFO ] [Kivy ] v1.11.1
[INFO ] [Kivy ] Installed at "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/init.py"
[INFO ] [Python ] v3.8.3 (default, May 27 2020, 02:08:17) [GCC 9.3.0]
[INFO ] [Python ] Interpreter at "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/bin/python3"
[INFO ] [Logger ] Purge log fired. Analysing...
[INFO ] [Logger ] Purge 15 log files
[INFO ] [Logger ] Purge finished!
[INFO ] [KivyMD ] v0.104.1
[INFO ] [Factory ] 184 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil, img_gif (img_ffpyplayer ignored)
[INFO ] [Window ] Provider: sdl2
[INFO ] [GL ] Using the "OpenGL ES 2" graphics system
[INFO ] [GL ] Backend used
[INFO ] [GL ] OpenGL version <b'OpenGL ES 3.2 v1.r20p0-01rel0.5a1b26bb5d6f760a7fe004c7d2efd431'>
[INFO ] [GL ] OpenGL vendor <b'ARM'>
[INFO ] [GL ] OpenGL renderer <b'Mali-G72 MP3'>
[INFO ] [GL ] OpenGL parsed version: 3, 2
[INFO ] [GL ] Texture max size <8192>
[INFO ] [GL ] Texture max units <16>
[INFO ] [Window ] auto add sdl2 input provider
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked [INFO ] [Text ] Provider: sdl2 [INFO ] [GL ] NPOT texture support is available [INFO ] app started [INFO ] main.kv loaded [INFO ] security.kv loaded [WARNING] [Base ] Unknown provider [INFO ] [Base ] Start application main loop [INFO ] [Base ] Leaving application in progress...

Traceback (most recent call last):
File "/storage/emulated/0/@tsmile/projects/pro_two/main.py", line 36, in
Project().run()

File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/app.py", line 855, in run
runTouchApp()

File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/base.py", line 504, in runTouchApp
EventLoop.window.mainloop()

File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/core/window/window_sdl2.py", line 747, in mainloop
self._mainloop()

File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/core/window/window_sdl2.py", line 479, in _mainloop
EventLoop.idle()

File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/base.py", line 339, in idle
Clock.tick() File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/clock.py", line 591, in tick self._process_events() File "kivy/_clock.pyx", line 384, in kivy._clock.CyClockBase._process_events File "kivy/_clock.pyx", line 414, in kivy._clock.CyClockBase._process_events File "kivy/_clock.pyx", line 412, in kivy._clock.CyClockBase._process_events File "kivy/_clock.pyx", line 154, in kivy._clock.ClockEvent.tick File "kivy/_clock.pyx", line 86, in kivy._clock.ClockEvent.get_callback File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/weakmethod.py", line 56, in is_dead return self.proxy is not None and not bool(dir(self.proxy))

ReferenceError: weakly-referenced object no longer exists

我收到引用错误,其中显示

Weakly referenced objects do not exist

谁能建议我如何将 MDTextField 添加到 MDGridLayout?

也请告诉我为什么会出现这种错误。

考虑到您的意愿,我稍微修改了您的布局。 .py 保持不变,更新后的 .kv 在这里:

Screen:
MDBoxLayout:
    orientation:'vertical'
    md_bg_color:1,0,0,1
    MDToolbar:
        pos_hint_y: 0
    GridLayout:
        cols:1
        adaptive_height: True
        MDLabel:
            text:'Manic'
            halign:'center'
        BoxLayout:
            cols: 2
            rows: 1

            MDLabel:
                halign:'center'
                size_hint_y: 0.4
                size_hint_x: 0.3

            MDTextFieldRect:
                size_hint_y: 0.4
            MDFlatButton:
                text: "Test"
                md_bg_color: 1,1,0,1
                size_hint_y: 0.4
                size_hint_x: 0.3
        MDLabel:
            halign:'center'
            size_hint_y: 0.2

至于弱引用对象:

弱引用在基本层面上是对对象的引用,它将被垃圾收集器删除。如果您想了解更多信息,我建议您查看@AlexMartelli 在 this post.

上的详细回答