2015-02-03 7 views
0

내 간단한 질문에 대해 용서해 주겠다. 그러나 나는 어떤 것을 이해하지 못한다. 한 가지 방법으로 팝업 창에있는 버튼에서 다른 방법으로 몇 가지 인수를 지정하고 싶습니다."on_press"에서 팝업으로 인수/가져 오기

예 :

평 코드 내가 원하는 무엇

class GeneralForm(TabbedPanel): 

    def EDIT(self,D): 
     box1=BoxLayout(orientation='vertical') 
     t1=TextInput(text=GeneralForm.PARSE(self,D)) 
     b2=Button(text='Save') 
     b3=Button(text='Cancel') 


     box2=BoxLayout() 

     box2.add_widget(b2) 
     box2.add_widget(b3) 

     box1.add_widget(t1) 
     box1.add_widget(box2) 

     popup = Popup(content=box1,auto_dismiss=False,size_hint=(.75,.75),title='Edit') 
     b2.bind(on_press=self.SAVE_EDIT) <====== There is a problem 
     b3.bind(on_press=popup.dismiss) 
     popup.open() 


    def SAVE_EDIT(self,instance): 
     !!! DOING SOMETHING !!! 

https://s3.amazonaws.com/xasan/snapshot/stack1.png

:

방법 "EDIT"나는 텍스트 입력 "T1"가에서

. 이 텍스트 입력에서 텍스트를 변경 한 후에는 두 개의 인수를 사용하여 SAVE_EDIT 메소드를 호출하는 "b2"버튼을 누릅니다.

그래서 세 번째 악기를 "SAVE_EDIT"메서드에 제공하여 t1에서 편집 된 텍스트를 반환하고 싶습니다. 이 같은

뭔가 :

평 코드

class GeneralForm(TabbedPanel): 

def EDIT(self,D): 
    box1=BoxLayout(orientation='vertical') 
    t1=TextInput(text=GeneralForm.PARSE(self,D)) 
    b2=Button(text='Save') 
    b3=Button(text='Cancel') 


    box2=BoxLayout() 

    box2.add_widget(b2) 
    box2.add_widget(b3) 

    box1.add_widget(t1) 
    box1.add_widget(box2) 

    popup = Popup(content=box1,auto_dismiss=False,size_hint=(.75,.75),title='Edit') 
    b2.bind(on_press=self.SAVE_EDIT(t1.txt)) <====== There is a problem 
    b3.bind(on_press=popup.dismiss) 
    popup.open() 


def SAVE_EDIT(self,instance,TEXT): <====== There is a problem 
    !!! DOING SOMETHING with TEXT!!! 

단계별 :

  1. 는 popen 창은 텍스트 입력에 텍스트와 함께 문을 열었습니다.
  2. 텍스트를 편집하거나 삭제하거나 추가했습니다.
  3. "저장"(b2) 버튼을 클릭하고 txt 입력 (t1)의 모든 텍스트를 저장하거나 구문 분석하거나 다른 작업을 수행하는 "SAVE_EDIT"메소드를 누릅니다. 이 텍스트와 함께 사용됩니다.

미리 감사드립니다.

답변

0

당신은 lambda 사용할 수 있습니다

on_press=lambda instance, text=t1.txt: self.SAVE_EDIT(instance, TEXT=text) 

또는 functools.partial()을 :

on_press=partial(self.SAVE_EDIT, TEXT=t1.txt) 

두 변종이 bind 호출 즉시 t1.txt를 사용, 값은 당신이를 누른 후 무용지물이 될 수있다 단추.

현재 가장 최근의 값을 사용하려면이 경우

on_press=lambda instance: self.SAVE_EDIT(instance, TEXT=t1.txt) 

t1.txt 콜백이 호출 될 때마다 호출됩니다.

+0

감사합니다. 두 가지 방법 모두 완벽하게 작동합니다. –

+0

하지만 새로운 문제가 있습니다. 편집중인 모든 텍스트가 SAVE_EDIT 메서드로 푸시되지 않습니다. 저장 버튼을 클릭하기 전에 t1 = TextInput (text = GeneralForm.PARSE (self, D))에 있던 오래된 텍스트 만 SAVE_EDIT로갑니다. 왜 텍스트 = t1.text 변수의 오래된 값을 얻는가? 다시 한번 사과드립니다. –

+0

@AntonyMakaruk : 가장 최근의 't1.txt' 값을 사용하는 방법을 보여줄 답변을 업데이트했습니다. – jfs