繁体   English   中英

如何从函数中的变量设置现有文本? Python Kivy

[英]How to set existing text from a variable within a function? Python Kivy

我创建了一个打开日志文件的函数,并将其保存到名为loginfo的变量中。 在我的kivy文件中,我有一个TextInput小部件。 我尝试将现有text:设置为root.loginfo

loginfo必须在函数中,因为我使用的是Kivy的Clock重新读取日志文件。

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)

Kivy文件:

<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' 我感到困惑和困惑,任何帮助将不胜感激。 提前致谢。

这是一个完成您想做的完整示例。 您必须对其进行修改以将其与您的代码集成,但是我的目的是向您展示实现此目标的正确方法,并让您自己使用它。

请注意我如何使用Clock.schedule_interval而不是计划一次。 schedule_interval中的1是调用self.reset_text函数之间的时间(以秒为单位)。 请注意,在reset_text函数中,如何使用self.root (GridLayout) self.root我的kv文件中的基本窗口小部件,然后通过执行self.root.ids['my_text_input']

main.py

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM