2016-06-17 8 views
0

일부 Kivy 위젯의 값을 설정하는 데 사용 된 문자열이 있다고 가정 해 보겠습니다. 모든 위젯을 해당 문자열의 변경에 어떻게 대응시킬 수 있습니까?
그 문자열을 각 위젯의 속성으로 만들 수 있지만, 하나의 위젯의 속성을 변경하면 동일한 속성을 가진 다른 속성이 적절하게 변경되지 않습니다.여러 위치에서 문자열 값을 변경하는 방법은 무엇입니까?

내가 원하는 동작은 목록 참조 같다 :

st = ["1"] 
st1 = st 
st.append("2") 
print(st1, st) # output: ['1', '2'] ['1', '2'] 

당신이 볼 수 있듯이, 나는 목록 st을 변경할 때, 목록 st1도 변경됩니다. st1은 목록에 대한 참조이기 때문입니다. 이 동작을 문자열에 적용하려면 어떻게해야합니까? 파이썬의 표준 라이브러리는 여기에 내가

를 원하는 것을 달성 할 수있는 방법을 가지고 있지 않은 경우 아마도 Kivy에서 데모, Kivy이다 사용 :

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.textinput import TextInput 

class TestApp(App): 
    def change_text(self, bt): 
     self.string += "!" 
     print(self.string) 

    def build(self): 
     self.string = "Hello" 
     lb = Label(text = self.string) 
     bt = Button(on_press = self.change_text) 
     tx = TextInput(text = self.string) 
     bl = BoxLayout() 
     bl.add_widget(lb) 
     bl.add_widget(tx) 
     bl.add_widget(bt) 
     return bl 

TestApp().run() 

버튼을 누르면됩니다 그래서, 앱의 속성 string 변경, 하지만 변경 사항을 위젯에 그대로 반영하고 싶습니다. (Label, TextInput)

답변

0

kivy에서는 속성을 사용할 수 있습니다 (완전히 다른 점은 파이썬 속성과 혼동하지 마십시오). KV 언어에서 다음을 수행 할 수 있어야한다 :

MainWidget: 
    id: "main" 
    mystring: "asdf" 

    widget1: 
     content: main.mystring 
    widget2: 
     content: main.mystring 
    ... 

properties의 kivy 문서에서 자세히 알아보십시오.

관련 문제