【问题标题】:How can I update what is displayed in TextInput widget? python kivy如何更新 TextInput 小部件中显示的内容?蟒蛇
【发布时间】:2019-02-07 00:52:28
【问题描述】:

我有一个 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 文件的实时提要?

【问题讨论】:

    标签: python-3.x logging kivy textinput


    【解决方案1】:

    您必须生成一个方法/函数来检查更改并加载文件以更新文本框。没有“自动”的方式来做到这一点。

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

    大多数情况下,这些都是在超时时工作的,因此您可以定义时钟,告诉它要运行什么函数,是否应该重复,以及超时的频率。每次时钟超时,都会调用该函数。你可以编写函数来做任何你喜欢的事情,在这种情况下,检查文件是否有变化。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      相关资源
      最近更新 更多