如何更新 TextInput 小部件中显示的内容? python 基维

How can I update what is displayed in TextInput widget? python kivy

我有一个 TextInput 小部件,它应该在 .log 文件中显示文本。

python 脚本看起来像

logginfo = ObjectProperty()

with open('logtest.log', 'r') as file:
    loginfo = file.read()

kivy 文件看起来像

TextInput:
    id: logginfo
    text: root.loginfo

问题是,日志文件只被读取一次,这就是显示的内容。

如何在 .log 文件更改时更新 loginfo?换句话说,如何获得 logtest.log 文件的实时提要?

您将必须生成一个 method/function 来检查更改并加载文件来为您更新文本框。没有 "automagic" 方法。

我不直接使用 kivy,但大多数 GUI 框架似乎都带有某种计时器或超时对象。在这种情况下,Kivy 似乎没有任何不同。快速搜索显示 Kivy 有一个 "Clock" 对象。我找到了一些文档 here

大多数时候,这些都是在超时时工作的,所以你定义时钟,告诉它什么功能 运行,它是否应该重复,以及超时的频率。每次时钟超时,都会调用该函数。您可以对函数进行编码以执行任何您喜欢的操作,在这种情况下,请检查文件是否有更改。

我建议对文件进行散列(像 md5 这样简单的东西)并将散列存储在变量中。然后,每次时钟超时,它可以简单地将文件哈希与您存储在 ram 中的哈希进行比较,如果它发生了变化,您就知道您需要用文件的新内容更新文本框。如果不是,您不需要在另一个超时间隔内重新访问该文件。

如果您对尝试完成该项目时遇到的问题有具体问题,请针对具体问题提出新问题,此时再次显示您的代码。