Kivy - 如何将我的应用程序设置为可调整为指定大小?

Kivy - How do I set my app to be resizable up to a specified size?

如何将我的 Kivy 应用程序设置为可以调整到指定大小并且不大于指定大小但可以调整为小于指定大小?

这实现起来很简单,但恐怕你不能在 "realtime" 中执行(至少不能在 Windows 中执行),因为大小 属性 是在您从调整大小释放按钮后更新,即 "confirm" 最终大小。为此,您需要进入 WinAPI 和其他适当的系统 API,但请注意它会非常耗费资源,因为您基本上会检查系统 API每次更改(如果 window 经理允许浮动,甚至 300 → 300.0000000001)。

也就是说,使用 Kivy,当行为必须检查调整大小并禁止实际使其变大时,您可以很容易地做到这一点,而无需以任何方式禁用 Window 的调整大小。

你需要先设置初始大小(在任何其他 Kivy 导入之前使用 Config)以使其保持一致,否则你最终会得到 Window 大小 800x600,在您尝试调整大小后,它会缩小到 300x150。剩下的只是绑定到 Window

sizeon_resize 属性
# set the initial size
from kivy.config import Config

MAX_SIZE = (300, 150)
Config.set('graphics', 'width', MAX_SIZE[0])
Config.set('graphics', 'height', MAX_SIZE[1])

from kivy.app import App
from kivy.uix.button import Button
from kivy.core.window import Window


class My(App):
    def check_resize(self, instance, x, y):
        # resize X
        if x > MAX_SIZE[0]:
            Window.size = (300, Window.size[1])
        # resize Y
        if y > MAX_SIZE[1]:
            Window.size = (Window.size[0], 150)

    def build(self):
        Window.bind(on_resize=self.check_resize)
        return Button()

My().run()

我在实验的时候发现了一个很简单的解决方法:

#:import W kivy.core.window.Window
<SomeWidget>:
    size_hint: None, None
    width: 300 if W.width <= 400 else (W.width - (W.width * .1))
    height: 300 if W.height <= 500 else (W.height - (W.height * .2))

这对我有用。我建议将 all 放在 'width' 和 'height' 的冒号之后,因为你可以看到它在 kv 语言中占用了很多空间。