如何设置一个函数中存在从可变文本? Python的Kivy

问题描述 投票:0回答:1

我创建了一个打开日志文件,并将其保存到一个变量命名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发生。如果没有功能,只是它的内容,将TextInput框中正确显示logtest.log文件的内容。

当我运行该脚本,它给了我AttributeError: 'NoneType' object has no attribute 'replace'。我很困惑,并卡住,任何帮助,将不胜感激。提前致谢。

python python-3.x kivy textinput
1个回答
0
投票

下面是一个完整的例子,做你想做的事情。你必须修改它以它与你的代码集成,但在这里,我的目的是要告诉你正确的方式来实现这一点,让你的工作与它自己。

注意我如何使用进度Clock.schedule_interval而不是一次。在schedule_interval的1是调用秒self.reset_text功能之间的时间。注意如何在reset_text功能,我可以使用kv(该网格布局),然后我可以得到的TextInput(因为我给它一个id)做self.root参考我的基本小部件在我self.root.ids['my_text_input']文件

卖弄.朋友

from kivy.app import App
from kivy.clock import Clock
from kivy.lang import Builder

GUI = Builder.load_file("main.kv")

class MainApp(App):
    def build(self):
        Clock.schedule_interval(self.reset_text, 1) # Check if log has changed once a second
        return GUI

    def reset_text(self, *args):
        with open("logtest.log", "r") as f:
            self.root.ids['my_text_input'].text = f.read()

MainApp().run()

main.kv

GridLayout:
    # This is the 'root' widget when referenced in python file
    cols: 1
    TextInput:
        id: my_text_input
© www.soinside.com 2019 - 2024. All rights reserved.