我创建了一个打开日志文件,并将其保存到一个变量命名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'
。我很困惑,并卡住,任何帮助,将不胜感激。提前致谢。
下面是一个完整的例子,做你想做的事情。你必须修改它以它与你的代码集成,但在这里,我的目的是要告诉你正确的方式来实现这一点,让你的工作与它自己。
注意我如何使用进度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