2016-10-29 11 views
1

私は暖房制御システムのコードを書いています。ラベルの文章を変更。 Python変数

私はちょうどWITHIN PYTHONからラベルテキストを変更できるようにしたいと思います。 これは、GUIコードではなく、メインのどこかにあることを意味しています。

import time 
from kivy.app import App 
from kivy.uix.button import Button 
from kivy.uix.label import Label 
from kivy.uix.widget import Widget 
from kivy.uix.boxlayout import BoxLayout 
import multiprocessing 
from kivy.properties import StringProperty 


class Data (Widget): 
    top = StringProperty('hiii') 
    def __init__(self, **kwargs): 
     super(Widget, self).__init__(**kwargs) 


global mydata  
mydata=Data() 

class myw (BoxLayout): 
    def __init__(self, **kwargs): 
     super(myw, self).__init__(**kwargs) 
     VERT = BoxLayout(orientation='vertical') 
     o = Label(text='Oben: ', 
        font_size=120) 
     m = Label(text='Mitte: ', 
       font_size=120) 
     u = Label(text='Unten: ', 
       font_size=120) 
     a = Label(text='Aussen: ', 
       font_size=120) 

     mydata.bind(top=o.setter('text')) 

     VERT.add_widget(o) 
     VERT.add_widget(m) 
     VERT.add_widget(u) 
     VERT.add_widget(a) 

     onoff = Button(text='Ein', 
       font_size=120, 
       size_hint=(0.3, 1)) 
     self.add_widget(VERT) 
     self.add_widget(onoff) 



class TutorialApp(App): 
    def build(self): 
     return myw() 

if __name__ == "__main__": 
    try: 
     global myapp 
     myapp=TutorialApp() 
     app_runner=multiprocessing.Process(target=myapp.run) 
     app_runner.start() 
     time.sleep(3) 
     mydata.top='new value assigned' 
     print (mydata.top) 
     time.sleep(5) 
     app_runner.terminate() 
    except Exception as e: 
     print ('error occured', e) 

は、私は意図的に私はコード(ここでは図示せず)の別の場所からアクセスすることができるように、kivyコード外の変数「マイデータ」を、宣言:

は、ここに私のMWEです。

+0

私が知っています!しかし、それは私のために働かなかった... – eric

+0

それは完璧に動作します。私が今見ているのは 'string = 'now changed''です。これは' RootWidget.string'とは異なる変数です。その変数を取得するには 'my_app.root.string = 'something''を使用します。それは変更する必要があります。しかし、あなたのコードは私にちょうど 'RuntimeError'と何か' freeze_support'について何かを与えてくれます... – KeyWeeUsr

+0

はい、私はそのアプローチでもエラーを受け取ります...私は2回目の試みで元のコードを編集しました... – eric

答えて

1

マルチプロセッシングの代わりにスレッドを使用すると、問題が解決しました。

ので、代わりの

app_runner=multiprocessing.Process(target=myapp.run) 

それが今読み:

app_runner=threading.Thread(target=myapp.run) 
関連する問題