我想創建一個函數,只有在用戶將文本輸入到TextInput中並單擊確定按鈕時纔會返回其值。例如使用Kivy創建輸入對話框
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()
爲了讓我的代碼只是坐在一個地方同時允許GUI框架,做它的事。但是,我發現基維沒有同等的方法。
編輯:
這裏是我的失敗嘗試(它的雜亂)
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
Thanks @inclement。我已經閱讀了一些遵循該範式的示例,但它不適合我,因爲發生了什麼是用戶按下了一個按鈕 - 調用了一個函數 - 並且完成了一些計算,然後顯示提示符回到我在那個功能中停止的地方。爲了讀者的緣故,我寧願不必將這個功能分成兩半。 – jsexauer
我想過了,但我沒有比我建議的更好的想法,這對我來說似乎很自然。說實話,我不相信這種範式對你來說是錯誤的,但這是你的選擇,我當然不能聲稱它是一個權威。 – inclement
對我來說這似乎很奇怪,這是無法完成的。在其他GUI框架中,它是非常標準的,它具有簡單的對話框並調用一個函數來獲取用戶對提示的響應。只是感到驚訝,沒有乾淨的方式在基維做。感謝您的幫助,一如既往。 (順便說一句,謝謝你回答如此多的Kivy問題;我發現它們是非常寶貴的) – jsexauer