无法在 MDGridLayout 中添加 kivymd 的 MDTextField

Posted

技术标签:

【中文标题】无法在 MDGridLayout 中添加 kivymd 的 MDTextField【英文标题】:Unable to add kivymd's MDTextField in MDGridLayout 【发布时间】:2021-06-16 07:56:35 【问题描述】:

我是 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] 记录日志到 /storage/emulated/0/@tsmile/projects/pro_two/.kivy/logs/kivy_21-03-19_38.txt [信息] [Kivy] v1.11.1 [信息] [Kivy] 安装在“/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/init .py" [INFO] [Python] v3.8.3(默认,2020 年 5 月 27 日,02:08:17) [GCC 9.3.0] [信息] [Python] 解释器位于“/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/bin/python3” [INFO] [Logger] 清除日志已触发。正在分析... [INFO] [Logger] 清除 15 个日志文件 [INFO] [Logger] 清除完成! [信息] [KivyMD] v0.104.1 [信息] [工厂] 已加载 184 个符号 [信息] [图像] 提供者:img_tex、img_dds、img_sdl2、img_pil、img_gif(img_ffpyplayer 被忽略) [信息] [窗口] 提供者:sdl2 [INFO ] [GL ] 使用“OpenGL ES 2”图形系统 [INFO] [GL] 后端使用 [信息] [GL] OpenGL 版本 [INFO] [GL] OpenGL 供应商 [INFO] [GL] OpenGL 渲染器 [INFO] [GL] OpenGL 解析版本:3、2 [INFO] [GL] 纹理最大尺寸 [INFO] [GL] 纹理最大单位 [INFO] [Window] 自动添加 sdl2 输入提供程序 [INFO] [Window] 虚拟键盘不允许,单模式,不停靠 [信息] [文本] 提供者:sdl2 [INFO] [GL] NPOT 纹理支持可用 [信息] 应用启动 [信息] main.kv 已加载 [信息] security.kv 已加载 [警告] [基础] 未知提供者 [INFO] [Base] 启动应用程序主循环 [INFO ] [Base ] 正在退出申请...

回溯(最近一次通话最后一次): 文件“/storage/emulated/0/@tsmile/projects/pro_two/main.py”,第 36 行,在 项目().run()

文件“/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/app.py”,第 855 行,正在运行 运行TouchApp()

文件“/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/base.py”,第 504 行,在 runTouchApp EventLoop.window.mainloop()

文件“/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/core/window/window_sdl2.py”,第747行,在主循环中 self._mainloop()

文件“/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/core/window/window_sdl2.py”,第479行,在 _mainloop EventLoop.idle()

文件“/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/base.py”,第 339 行,空闲 时钟.tick() 文件“/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/clock.py”,第 591 行,勾选 self._process_events() 文件“kivy/_clock.pyx”,第 384 行,在 kivy._clock.CyClockBase._process_events 文件“kivy/_clock.pyx”,第 414 行,在 kivy._clock.CyClockBase._process_events 文件“kivy/_clock.pyx”,第 412 行,在 kivy._clock.CyClockBase._process_events 文件“kivy/_clock.pyx”,第 154 行,在 kivy._clock.ClockEvent.tick 文件“kivy/_clock.pyx”,第 86 行,在 kivy._clock.ClockEvent.get_callback 文件“/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.8/site-packages/kivy/weakmethod.py”,第 56 行,在 is_dead return self.proxy 不是 None 也不是 bool(dir(self.proxy))

ReferenceError: 弱引用对象不再存在

我收到参考错误错误,其中说的是

弱引用对象不存在

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

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

【问题讨论】:

【参考方案1】:

考虑到您的意愿,我稍微修正了您的布局。 .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 帖子上的详细回答。

【讨论】:

非常感谢 现在一切正常。但我仍然需要了解更多关于弱​​引用错误的信息。 ??

以上是关于无法在 MDGridLayout 中添加 kivymd 的 MDTextField的主要内容,如果未能解决你的问题,请参考以下文章

无法在注册为工厂小部件的 kivy 布局中添加对象

Kivy - 添加和删除标签

如何在kivy python中添加标签,TextInput

在 Kivy 中释放另一个按钮时添加一个新按钮

Kivy Popup 无法访问 root 方法

如何在Buildozer中构建kivy和Twisted