
[英]How can I pass a variable from function to function in 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.