2017-01-16 157 views
0

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

我该如何解决它?任何想法?

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

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) 

回答

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。如果我没有记错,防止意外事件(检查碰撞触碰按钮区域)。

+0

谢谢你的回答,但不幸的是,现在它并没有触发该方法。该按钮正在改变颜色。 – sebap123

+0

@ sebap123请参阅编辑。线程可以防止冻结UI。如果请求不起作用,那是请求/代码的问题。 – KeyWeeUsr

+0

它现在有效!非常感谢您的编辑。 – sebap123