Python Kivy-在按下按钮时更改按钮颜色

Python Kivy-在按下按钮时更改按钮颜色,python,kivy,Python,Kivy,我最近开始使用为我的python应用程序设计GUI。在应用程序中,其中一个操作是使用提供的API向服务器发送请求。经过几次测试后,我注意到只有当我想发出请求时才会发生一件恼人的事情——按下按钮时按钮不会改变颜色(我说的是默认操作)。但是,当使用simpleprint()时,它会发生变化 我怎么能修好它?有什么想法吗 这是我的测试应用程序的代码: class TestApp(App): def build(self): parent = Widget() b

我最近开始使用为我的python应用程序设计GUI。在应用程序中,其中一个操作是使用提供的API向服务器发送请求。经过几次测试后,我注意到只有当我想发出请求时才会发生一件恼人的事情——按下按钮时按钮不会改变颜色(我说的是默认操作)。但是,当使用simple
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)

这很可能是因为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()

此外,不要在按下按钮时使用
,而要在释放按钮时使用
。如果我记得正确,可防止意外事件(检查碰撞触摸↔按钮区域)。

这很可能是因为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()

此外,不要在按下按钮时使用
,而要在释放按钮时使用
。如果我记得正确,可防止意外事件(检查碰撞触摸↔按钮区域)。

谢谢您的回答,但不幸的是,现在它根本没有触发该方法。按钮正在正确更改颜色。@sebap123请参见编辑。线程防止冻结用户界面。如果请求不起作用,那就是请求/代码的问题。感谢您的回答,但不幸的是,现在它根本没有触发该方法。按钮正在正确更改颜色。@sebap123请参见编辑。线程防止冻结用户界面。如果请求不起作用,那就是请求/代码的问题。