kivy python 读取oracle数据库_Kivy和Python线程-如何在它们之间获取数据

我在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 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文件

:

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

:

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()

来源:https://www.icode9.com/content-1-567301.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值