Kivy异步问题 - 滚动视图后画布没有得到更新

时间:2018-01-01 03:30:19

标签: python kivy kivy-language

我在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()

1 个答案:

答案 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()

调试图片:

enter image description here