桌面上Kivy散布的大小为Window.size

时间:2018-12-07 16:27:51

标签: kivy

我正在使用Kivy框架开发适用于Linux桌面的应用程序。我正在尝试将“散布”大小设置为与窗口大小相同。

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 :(得分:0)

不确定鼠标是否有问题,但是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()