在" on_press"的弹出窗口中给出/获取参数

时间:2015-02-03 09:42:29

标签: python arguments kivy popen

请原谅我的简单问题,但我不明白一些事情。 我想从一个方法的弹出窗口中的按钮给另一个方法提供一些参数。

示例:

.py代码

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

我想要的是什么:

在“编辑”方法中,我有文本输入“t1”。更改此文本输入中的文本后,按下“b2”按钮,调用带有两个参数的方法SAVE_EDIT。

所以,我想将第三个方法给予“SAVE_EDIT”方法,该方法将在t1中返回一个已编辑的文本。

这样的事情:

.py代码

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. 我们编辑了文字,删除了某些内容或添加了内容。
  4.   
  5. 我们点击“保存”按钮(b2)并将txt输入(t1)中的所有文本推送到方法“SAVE_EDIT”,我们保存,解析或做其他事情   用这个文字。
  6.   

提前致谢。

1 个答案:

答案 0 :(得分: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)

两个变体在t1.txt调用时都使用bind,即按下按钮时该值可能已过时。

使用当前最近的值:

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

在这种情况下,每次调用回调时都会调用t1.txt