kivymd的WindowController使用

1、kivymd的WindowController使用

这是一个很简单的类,用于getting information about the state of the current application window.

2、使用

2.1、属性:

  • window_resizing_direction:窗口宽度变换的状态,left:变窄;right:变宽
  • real_device_type:通过宽度判断设备类型
    • 宽度<dp(500):是mobile
    • 宽度<dp(1100):是tablet
    • 否则是desktop

2.2、方法

  • on_size:设置real_device_type
  • get_real_device_type:返回real_device_type

2.3、注意事项

  • 重载on_size的时候需要调用父类的on_size,否则不会设置real_device_type字段。

2.4 案例

# When resizing the application window, the direction of change will be
# printed - 'left' or 'right'.

from kivymd.app import MDApp
from kivymd.uix.controllers import WindowController
from kivymd.uix.screen import MDScreen


class MyScreen(MDScreen, WindowController):
    def on_width(self, *args):
        print(self.get_window_width_resizing_direction())
        print(self.get_real_device_type())

    def on_size(self, *args):
        # super().on_size(*args)
        # 明确调用 WindowController 的 on_size
        WindowController.on_size(self, *args)
        print(args)


class Test(MDApp):
    def build(self):
        return MyScreen()


Test().run()

在这里插入图片描述

3、源码


from kivy.core.window import Window
from kivy.core.window.window_sdl2 import WindowSDL
from kivy.metrics import dp


class WindowController:
    def __init__(self):
        self.window_resizing_direction = "unknown"
        self.real_device_type = "unknown"
        self.__width = Window.width
        Window.bind(on_resize=self._on_resize)

    def on_size(self, instance, size: list) -> None:
        """Called when the application screen size changes."""

        window_width = size[0]

        if window_width < dp(500):
            self.real_device_type = "mobile"
        elif window_width < dp(1100):
            self.real_device_type = "tablet"
        else:
            self.real_device_type = "desktop"

    def get_real_device_type(self) -> str:
        """Returns the device type - 'mobile', 'tablet' or 'desktop'."""

        return self.real_device_type

    def get_window_width_resizing_direction(self) -> str:
        """Return window width resizing direction - 'left' or 'right'."""

        return self.window_resizing_direction

    def _set_window_width_resizing_direction(self, width: int) -> None:
        if self.__width > width:
            self.window_resizing_direction = "left"
        elif self.__width < width:
            self.window_resizing_direction = "right"

    def _on_resize(
        self, window_sdl2: WindowSDL, width: int, height: int
    ) -> None:
        self._set_window_width_resizing_direction(width)
        self.__width = width

流程图

Kivy Window WindowController 窗口大小改变(触发 on_resize) _on_resize(width, height) _set_window_width_resizing_direction(width) 更新 self.__width 隐式触发 on_size() 更新 real_device_type Kivy Window WindowController
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值