我最近开始使用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)
答案 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
。如果我没记错的话,可以防止意外事件(检查碰撞触摸按钮区域)。