Обновление окна в Кивах - PullRequest
0 голосов
/ 06 мая 2018

Я хочу знать, возможно ли обновить окно в Киви.

Почему мне нужно это сделать:

Я хочу сделать анимацию изменения размера окна.

for i in range(100, 400):
    Window.size = (300, i)
    sleep(.01)

Сейчас он просто спит в течение 3 секунд, а затем изменяет размеры.

Что-то похожее на то, как это делается в Tkinter:

Я некоторое время работал с Tkinter. В Tkinter это будет сделано так:

w = tk.Tk()
w.update()

Как бы это сделать с Киви?

Любая помощь будет высоко оценена!

1 Ответ

0 голосов
/ 06 мая 2018

В графическом интерфейсе не следует использовать sleep(), это задача, которая блокирует цикл обработки событий, каждый графический интерфейс пользователя предлагает инструменты для создания того же эффекта удобным для пользователя способом, в случае tkinter after() (так избегайте использования sleep() с update() (это плохая практика), в случае kivy вы можете использовать Clock:

import kivy
from kivy.app import App

from kivy.clock import Clock
from kivy.core.window import Window

from kivy.uix.button import Button
from kivy.config import Config
Config.set('graphics', 'width', '300')
Config.set('graphics', 'height', '100')
Config.write()

Window.size = (300, 100)

class ButtonAnimation(Button):
    def __init__(self, **kwargs):
        Button.__init__(self, **kwargs)
        self.bind(on_press=self.start_animation)

    def start_animation(self, *args):
        self.counter = 100
        self.clock = Clock.schedule_interval(self.animation, 0.01)

    def animation(self, *args):
        Window.size = (300, self.counter)
        self.counter += 1
        if self.counter > 400:
            self.clock.cancel()

class MyApp(App):
    def build(self):
        root = ButtonAnimation(text='Press me')
        return root

if __name__ == '__main__':
    MyApp().run()

или лучше, используя Animation, преимущество этой реализации помимо наличия более читабельного кода заключается в том, что kivy обрабатывает, когда он должен обновляться таким образом, что он не потребляет ресурсы без необходимости:

import kivy
from kivy.app import App

from kivy.core.window import Window
from kivy.animation import Animation
from kivy.uix.button import Button
from kivy.config import Config
Config.set('graphics', 'width', '300')
Config.set('graphics', 'height', '100')
Config.write()

Window.size = (300, 100)

class ButtonAnimation(Button):
    def __init__(self, **kwargs):
        Button.__init__(self, **kwargs)
        self.bind(on_press=self.start_animation)

    def start_animation(self, *args):
        anim = Animation(size=(300, 400), step=0.01)
        anim.start(Window)

class MyApp(App):
    def build(self):
        root = ButtonAnimation(text='Press me')
        return root

if __name__ == '__main__':
    MyApp().run()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...