Kivy和Python线程-如何在它们之间获取数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Kivy和Python线程-如何在它们之间获取数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2826字,纯文字阅读大概需要5分钟。
内容图文
![Kivy和Python线程-如何在它们之间获取数据](/upload/InfoBanner/zyjiaocheng/663/ef7464e2a01d4bdfaa57411363c79c35.jpg)
我在python(threading)和kivy上遇到一些问题:
这是一些代码:
import kivy
import threading
import time
from kivy.app import App
from kivy.uix.button import Button
class Thread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.counter = 0
def run(self):
while True:
print "Thread is running "+str(self.counter)
app.button.text = self.set_button(self.counter)
app.button.text = str(self.counter)
time.sleep(0.5)
def count(self):
self.counter += 1
app.button.text = str(self.counter)
def set_button(self, value):
app.button.text = str(value)
class MyApp(App):
def __init__ (self, thread_object):
App.__init__(self)
self.thread_object = thread_object
def callback(self,instance):
print('The button <%s> is being pressed' % instance.text)
self.thread_object.count()
def build(self):
self.button = Button(text='Hello World')
self.button.bind(on_press=self.callback)
return self.button
thread = Thread()
thread.start()
app = MyApp(thread)
app.run()
现在-此代码只需一个按钮即可打开kivy应用程序.任务是:按下按钮,一些数据应显示在线程代码中(通过“ count”方法执行).
问题是相反的-线程代码应更改按钮的文本.我尝试了两种方法:
>直接编写:app.button.text = str(self.counter)
>通过“ set_button”方法编写:app.button.text = self.set_button(self.counter)
它们都显示错误“属性错误:’MyApp’对象没有属性’按钮’”.
有没有任何方法可以直接交换数据而无需请求,即使不使用“ thread_object”在此处进行指针操作
def __init__ (self, thread_object):
谢谢你的帮助.
解决方法:
这可能会解决您的所有问题.那就是我喜欢在处理线程和奇异语言时进行编码的方式.
这是thread.py文件
import threading
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import NumericProperty
class Thread(BoxLayout):
counter = NumericProperty(0)
def Counter_function(self):
self.counter += 1
self.ids.lbl.text = "{}".format(self.counter)
def First_thread(self):
threading.Thread(target = self.Counter_function).start()
self.counter += 1
self.ids.lbl.text = "{}".format(self.counter)
class MyApp(App):
def build(self):
self.load_kv('thread.kv')
return Thread()
if __name__ == "__main__":
app = MyApp()
app.run()
这是thread.kv文件
<Thread>:
Button:
text: "use thread"
on_release: root.First_thread()
Button:
text: "Hit me"
on_release: root.Counter_function()
Label:
id: lbl
text: "Numbers"
现在,您在评论中说,您在动态加载GUI方面遇到困难.所以,这是一个例子.
Builder.load_string('''
[SideBar@BoxLayout]:
content: content
orientation: 'vertical'
size_hint: .2,1
BoxLayout:
orientation: 'vertical'
# just add a id that can be accessed later on
id: content
<Root>:
Button:
center_x: root.center_x
text: 'press to add_widgets'
size_hint: .2, .2
on_press:
sb.content.clear_widgets()
root.load_content(sb.content)
SideBar:
id: sb
''')
class Root(BoxLayout):
def load_content(self, content):
for but in range(20):
content.add_widget(Button(text=str(but)))
class MyApp(App):
def build(self):
return Root()
内容总结
以上是互联网集市为您收集整理的Kivy和Python线程-如何在它们之间获取数据全部内容,希望文章能够帮你解决Kivy和Python线程-如何在它们之间获取数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。