Kivy разброс на рабочем столе с размером = Window.size - PullRequest
0 голосов
/ 07 декабря 2018

Я занимаюсь разработкой приложения для рабочего стола Linux с использованием фреймворка Kivy.Я пытаюсь установить размер Scatter, равный размеру окна.

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.scatter import Scatter
from kivy.graphics import Color, Rectangle


class MyScatter(Scatter):
    def __init__(self, *args, **kwargs):
        super(MyScatter, self).__init__(*args, **kwargs)

        self.size_hint=(None, None)
        self.size=(Window.width, Window.height)

        with self.canvas:
            Color(1, 0, 0)
            Rectangle(pos=self.pos, size=(100, 200))

class ScatterApp(App):
    def build(self):
        return MyScatter()


ScatterApp().run()

Когда я запускаю код, разброс немедленно отражает движение моей мыши и перемещает прямоугольник.Когда я максимизирую окно, оно реагирует более активно, я нажимаю только кнопку, но также масштабирую и вращаюсь, как если бы я использовал два пальца.

Когда я использую фиксированный размер (то есть self.size=(100, 200)), поведение в обоих случаях идентичнои разброс перемещается после нажатия кнопки.

Передача размера в качестве параметра ничего не меняет.

Я не использую язык kv.

"Мышь"это тачпад.

1 Ответ

0 голосов
/ 11 декабря 2018

Не уверен насчет проблем с мышью, но виджет MyScatter заполнит окно по умолчанию.Ваш код не отражает правильный размер.Попробуйте эту версию:

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.scatter import Scatter
from kivy.graphics import Color, Rectangle
from kivy.clock import Clock


class MyScatter(Scatter):
    def __init__(self, *args, **kwargs):
        super(MyScatter, self).__init__(*args, **kwargs)
        Clock.schedule_once(self.show_size, 0.1)

    def show_size(self, *args):
        with self.canvas:
            Color(1, 0, 0)
            Rectangle(pos=self.pos, size=self.size)


class ScatterApp(App):
    def build(self):
        return MyScatter()

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