请原谅我的简单问题,但我不明白一些事情。 我想从一个方法的弹出窗口中的按钮给另一个方法提供一些参数。
示例:
.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!!!
步骤一步:
- 打开了Popen窗口,文本输入中有一些文字。
- 我们编辑了文字,删除了某些内容或添加了内容。
- 我们点击“保存”按钮(b2)并将txt输入(t1)中的所有文本推送到方法“SAVE_EDIT”,我们保存,解析或做其他事情 用这个文字。
醇>
提前致谢。
答案 0 :(得分:0)
您可以使用lambda
:
on_press=lambda instance, text=t1.txt: self.SAVE_EDIT(instance, TEXT=text)
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
。