Comments 10
Спасибо за материал.
Было бы здорово также почитать про написание расширений для Kivy — насколько это сложно, что нужно сделать или переопределить и пр.
Было бы здорово также почитать про написание расширений для Kivy — насколько это сложно, что нужно сделать или переопределить и пр.
0
Спасибо за материал. Писал что-то похожее для своих проектов. Модуль именован KDialog. Кстати, как насчет мультипоточности в Kivy — твой пакет прерывает выполнение программы при появлении окна выбора, скажем, "Да/Нет"?
0
Не прерывает. Отображение всплывающего окна — это всего лишь создание нового виджета. Как только виджет прорисован — интерпретатор выполняет следующую строку кода.
0
Кстати, интересно было бы посмотреть на KDialog. Он где-нибудь опубликован?
0
Да. На github. kdialog.py
0
Интересное решение, особенно с rst хорошо придумал. А реализацию param=«loaddialog» я бы реализовал по-другому.
Почитай про объекты kivy.clock.Clock и kivy.network.urlrequest.Urlrequest
Почитай про объекты kivy.clock.Clock и kivy.network.urlrequest.Urlrequest
0
Про эти объекты мне известно. Дело в том, что невозможно (по крайней мере, у меня не получилось) создать диалоговое окно загрузки чего-либо, закрыть его и вывести следующий экран. Поэтому в модуле реализованы такие костыли. Если тебе удалось решить это, с удовольствием посмутрю на твое решение.
0
Если я правильно понял проблему, то вот решение (на примере твоего класса):
Urlrequest — потомок класса Thread. В принципе здесь делаем то же самое, что и твой костыль, только еще и тянем данные по указанному url. А kivy main thread в это время спокойно может прорисовывать интерфейс.
Обрати внимание на то, как перед отображением 2-го окна gif замирает — в этот момент основной поток приложения занят обработкой этой строки:
Если хочешь избавиться и от этого — создавай RstDocument в отдельном потоке и callback'ом отображай 2-е окно. Имхо — это уже лишнее.
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-е окно. Имхо — это уже лишнее.
0
Sign up to leave a comment.
Расширяем фреймворк Kivy пакетом XPopup (Часть 1-я)