Я хотел бы создать функцию, которая возвращает свое значение только после того, как пользователь вводит текст в TextInput и нажимает кнопку «ОК». Например
n = PopupInput("What number should I add?")
print 5+n
Я не могу понять, как написать kivy-диалог, который будет приостанавливать выполнение и ждать, пока пользователь его не закроет. В других инструментах GUI я бы использовал что-то вроде
while True:
if dialog.visable == False:
return int(textbox.text)
else:
wx.Yield()
Чтобы позволить моему коду просто сидеть на одном месте, позволяя графическому интерфейсу делать свое дело. Однако я не могу найти эквивалентного метода для Kivy.
РЕДАКТИРОВАТЬ:
Вот моя неудачная попытка (это грязно)
def PopupOk(text, title='', btn_text='Continue'):
btnclose = Button(text=btn_text, size_hint_y=None, height='50sp')
content = BoxLayout(orientation='vertical')
p = Popup(title=title, content=content, size=('300dp', '300dp'),
size_hint=(None, None))
content.add_widget(Label(text=text))
ti = TextInput(height='50sp', font_size='50sp', input_type='number')
content.add_widget(ti)
def _on_d(*args):
p.is_visable = False
p.bind(on_dismiss=_on_d)
p.is_visable = True
content.add_widget(btnclose)
btnclose.bind(on_release=p.dismiss)
p.open()
while not p.is_visable:
EventLoop.idle()
return ti.text