如何将我的 Kivy 应用程序设置为可调整为指定大小且不超过指定大小但可以调整为小于指定大小?
这实现起来非常简单,但恐怕您无法"实时"做到这一点(至少在 Windows 上不是),因为 size 属性会在您释放按钮后更新调整大小,即"确认"最终大小。为此,您需要访问 WinAPI 和其他适当的系统 API,但请注意,它确实会耗费资源,因为对于系统 API,您基本上会检查每个更改(如果窗口管理器允许浮点数,则甚至是 300 → 300.00000000001)。
话虽如此,使用 Kivy,当行为必须检查调整大小并禁止在不以任何方式禁用Window
调整大小的情况下实际放大它时,您可以非常轻松地制作它。
不过,您需要先设置初始大小(在任何其他 Kivy 导入之前使用Config
)以使其保持一致,否则您最终会得到大小800x600
的Window
,在您尝试调整大小后,它会缩小到300x150
.其余的只是与Window
的size
或on_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))
这对我有用。我建议将所有放在"宽度"和"高度"的冒号之后的其他地方,因为正如你所看到的,它在kv语言中消耗了很多空间。