【发布时间】:2019-02-08 17:02:46
【问题描述】:
我创建了一个打开日志文件的函数,并将其保存到名为loginfo 的变量中。在我的 kivy 文件中,我有一个 TextInput 小部件。我尝试将现有的text: 设置为root.loginfo。
loginfo 需要在函数内,因为我正在使用 kivy 的时钟重新读取日志文件。
Python 文件:
class Tasks(Screen):
logginfo = ObjectProperty()
def reset_text(dt):
with open('logtest.log', 'r') as file:
loginfo = file.read()
Clock.schedule_once(reset_text, -1)
基维文件:
<Tasks>:
name: 'task'
logginfo: logginfo
BoxLayout:
orientation: "vertical"
Label:
text: "TASKS"
TextInput:
id: logginfo
text: root.loginfo
当我创建reset_text(dt) 函数和kivy.clock 时,问题开始出现。如果没有该函数,只有它的内容,文本输入框会正确显示 logtest.log 文件的内容。
当我运行脚本时,它给了我AttributeError: 'NoneType' object has no attribute 'replace'。我很困惑和卡住,任何帮助将不胜感激。提前致谢。
【问题讨论】:
-
在你的 reset_text 函数中,你应该明确地改变你的 TextInput 的文本(那个时候带有
id: logginfo的那个)。此外,您能否发布更多代码 - 例如您在哪里定义 App 类等?如果我们可以复制/粘贴您的代码以自行调试,您将得到更好的答案,如下所示:stackoverflow.com/help/mcve -
@Erik 如何从我的 python 文件中显式更改 TextInput 中的文本?日志信息.文本?对于我的 App 类,我使用 Builder.load_file 来加载 kivy 文件。然后在构建函数中,我只返回 kivy 文件。
-
关闭 - 要引用您的 TextInput,您必须使用类似
App.get_running_app().root.ids['logginfo'].text = loginfo的方式引用它。试着把它放在你的reset_text函数中。 -
@Erik 你写“关闭 - ”是什么意思?当我添加该行并运行时,我得到`KeyError:'logginfo'`
-
我的意思是你已经接近找到正确的解决方案了。如果您收到 KeyError,我知道出了什么问题,但我需要查看您的更多代码。您可以编辑您的答案以获得更完整的 kv 文件吗?
标签: python python-3.x kivy textinput