Как стать автором
Обновить
10
0
Олег @ophermit

Python developer

Отправить сообщение
Тоже полезный инструмент, и довольно-таки функциональный. Но, я так понимаю, для его работоспособности необходимо локально развернуть интерпретатор Ruby?
Флаг DETACHED_PROCESS привязан к платформе, его использование нежелательно, чтобы не добавлять лишних проверок на текущую OS. А вот close_fds оказался панацеей, если не трогать std-потоки.

Статью обновил.

Большое спасибо за подсказку.
Спасибо, исправил)

P.S. С DETACHED_PROCESS поэкспериментирую завтра, это похоже на выход. Позже отпишусь.
Дельное замечание, спасибо. Добавил в статью.
Никогда не задавался этим вопросом, потому что не наблюдал особых неудобств. «Холодный» старт kivy-приложения на 1-3 секунды больше «холодного» старта python-интерпретатора.

В плане выбора фреймворка — проблематично сказать, чем Kivy лучше остальных. Qt и wxPython я детально не рассматривал. Отплясывай от потребностей :) Если есть потребность собирать .apk под android — тогда только Kivy.
Если я правильно понял проблему, то вот решение (на примере твоего класса):
    import kivy
    kivy.require("1.9.1")
    from kivy.app import App

    class Demo(App):
        def build(self):
            return Button(text='Press me!', on_release=self.show_dialog_async)

        @staticmethod
        def show_dialog_async(instance):
            progress = KDialog()

            def on_success(request, response):
                print('Success!')
                progress.body.dismiss()
                window = KDialog(
                    background_color=[0.4823529411764706, 0.49411764705882355, 0.5215686274509804, 1.0])
                window.show(text=response, rst=True, size_rst=(.9, .9), text_button_ok="OK", param="query")

            def on_redirect(request, result):
                new_url = request.resp_headers['location']
                print('Redirected to %s' % new_url)
                print(result)
                send_req(new_url)

            def send_req(url):
                UrlRequest(url=url, debug=True, on_success=on_success, on_redirect=on_redirect)

            progress.show(image="timerloading.gif", param="loaddialog", text='Loading...')
            send_req('http://python.org')

    Demo().run()


Urlrequest — потомок класса Thread. В принципе здесь делаем то же самое, что и твой костыль, только еще и тянем данные по указанному url. А kivy main thread в это время спокойно может прорисовывать интерфейс.

Обрати внимание на то, как перед отображением 2-го окна gif замирает — в этот момент основной поток приложения занят обработкой этой строки:
    window.show(text=response, rst=True, size_rst=(.9, .9), text_button_ok="OK", param="query")

Если хочешь избавиться и от этого — создавай RstDocument в отдельном потоке и callback'ом отображай 2-е окно. Имхо — это уже лишнее.
Спасибо! Очень кстати — даже не буду пытаться мучать его под виндой. Но, ради интереса — чего ему в винде не хватает, на что жалуется?
Интересное решение, особенно с rst хорошо придумал. А реализацию param=«loaddialog» я бы реализовал по-другому.
Почитай про объекты kivy.clock.Clock и kivy.network.urlrequest.Urlrequest
Кстати, интересно было бы посмотреть на KDialog. Он где-нибудь опубликован?
Не прерывает. Отображение всплывающего окна — это всего лишь создание нового виджета. Как только виджет прорисован — интерпретатор выполняет следующую строку кода.
Спасибо за идею — возьму на заметку. Там тоже есть нюансы, о которых стоит рассказать. Если меня никто не опередит — будет статья и об этом.
2

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность