我在kivy中有这段代码,按下按钮后,get_liner()函数被调用。 get_liner()然后调用get_canvas()。我希望在scrollview中的文本更新后,使用彩色背景更新画布。但似乎有一些异步问题并不能让代码按顺序运行。但是如果我第二次按下按钮,画布会在文本后更新。如何使这段代码有效?
myapp.py
file.clear();
file.seekg(std::ifstream::beg);
myapp.kv
def get_liner(self):
<some code here>
mythread2 = threading.Thread(target=partial(self.get_canvas),kwargs={'outputtext':outputtext})
mythread2.start()
def get_canvas(self, outputtext=None):
self.ids.rst_doc.text = outputtext
secondhalfview = self.ids.rst_doc
secondhalfview.canvas.before.clear()
with secondhalfview.canvas.before:
Color(1,1,0,1)
Rectangle(pos=secondhalfview.pos, size=secondhalfview.size)
self.dismiss_popup()
答案 0 :(得分:0)
我终于弄明白了这个问题。这不是异步问题,而是绘图问题。在我的旧代码中,画布被清除,然后我重绘Rectangle对象和Color对象,这会搞砸绘图序列。
以下是新代码,我不再清除画布,清除第一个文档,然后单独更新Color对象:
def new_get_canvas(self, outputtext=None):
self.ids.rst_doc.text = outputtext
rst_doc = self.ids.rst_doc
rst_doc.canvas.before.clear()
self.ids.secondhalfview.canvas.before.children.insert(
0,Color(211/255.0, 211/255.0, 211/255.0, 0.9))
self.dismiss_popup()
调试图片: