Мне хотелось бы, чтобы код Python открывал диалоговое окно в приложении Android и ждал пользователю нажать кнопку "ОК" (это первый шаг, который я хочу выполнить, прежде чем смогу создавать более сложные диалоговые окна ДА/НЕТ).
Пока единственное поведение, которое я могу для получения - это неблокирующий диалог, независимо от того, что я пытаюсь (сигналы, сокеты, общие переменные), но кажется, что диалог не отображается до тех пор, пока код Python не завершит свое выполнение.
вот мой пример, в котором используется глобальная переменная для подтверждения того, что пользователь закрыл диалоговое окно:
Python
Код: Выделить всё
from java import dynamic_proxy, jboolean, jvoid, Override, static_proxy
from java.lang import Runnable
from com.chaquo.python import Python
from android.app import AlertDialog
from android.content import DialogInterface
import threading
state_done = False
def open_dialog(activity):
def show_dialog():
print('Dialog shown')
builder = AlertDialog.Builder(activity)
builder.setTitle("Title")
builder.setMessage("This is a simple dialog from Python!")
class Listener(dynamic_proxy(DialogInterface.OnClickListener)):
def onClick(self, dialog, which):
print("OK button pressed")
state_done = True
listener = Listener()
builder.setPositiveButton("OK", listener)
dialog = builder.create()
dialog.show()
print('Dialog shown')
class R(dynamic_proxy(Runnable)):
def run(self):
show_dialog()
def dummy():
activity.runOnUiThread(R())
dialog_thread = threading.Thread(target=dummy)
dialog_thread.start()
dialog_thread.join()
while not state_done:
pass
print('done')
Код: Выделить всё
if (!Python.isStarted()) {
Python.start(new AndroidPlatform(this));
}
Python py = Python.getInstance();
PyObject pyObject = py.getModule("your_script");
pyObject.callAttr("open_dialog", this);
Код: Выделить всё
I/python.stdout: done
I/python.stdout: show_dialog
I/python.stdout: Dialog shown
*here i press the ok button*
I/python.stdout: OK button pressed
I/python.stdout: dismissed
Подробнее здесь: https://stackoverflow.com/questions/786 ... ive-dialog
Мобильная версия