Kivy - 按下时更改按钮颜色

时间:2017-01-16 05:24:33

标签: python kivy

我最近开始使用kivy为我的python应用程序设计GUI。在应用程序中,其中一个操作是使用提供的API向服务器发送请求。经过几次测试后,我注意到只有当我想提出请求时才会发生一件令人讨厌的事情 - 按钮在按下时不会改变颜色(我说的是默认动作)。但是,当使用简单的print()时,它会发生变化。

我该如何解决?有什么想法吗?

这是我的测试应用的代码:

class TestApp(App):
    def build(self):
        parent = Widget()
        btn = Button(text='Add')
        btn.bind(on_press=self.add)
        parent.add_widget(btn)
        return parent

    def add(self, obj):
        print("Adding")
        request = Request(url, urlencode(post_fields).encode())
        urlopen(request)

1 个答案:

答案 0 :(得分:2)

这很可能是因为UI冻结了。调用self.add,但在此之后,UI会一直等到请求完成,这可能会导致请求。

尝试这样做:

import threading

class TestApp(App):
    def build(self):
        parent = Widget()
        btn = Button(text='Add')
        btn.bind(on_press=self.add)
        parent.add_widget(btn)
        return parent

    def add(self, obj):
        print("Adding")
        #self.printer()  # freezing
        threading.Thread(target=self.printer).start()

    def printer(self, *args):
        while True:
            print 'blob'
TestApp().run()

此外,代替on_press而不是on_release。如果我没记错的话,可以防止意外事件(检查碰撞触摸按钮区域)。