固定 Kivy 程序的窗口大小

Posted

技术标签:

【中文标题】固定 Kivy 程序的窗口大小【英文标题】:Fixed window size for Kivy programs 【发布时间】:2016-09-06 23:01:39 【问题描述】:

有什么方法可以让 Kivy 程序的窗口大小保持不变?固定在某种意义上它的窗口大小不能增加或减少。例如,我想要一个窗口大小为 500x500 的 Kivy 程序,最终用户不能更改窗口大小或将其变为全屏。我尝试将高度、宽度、最小高度和最小宽度都设置为相同的值,但我仍然可以更改窗口大小并全屏显示。

【问题讨论】:

【参考方案1】:

有一种方法可以配置应用以禁用调整大小

from kivy.config import Config
Config.set('graphics', 'resizable', False)

同样,您可以设置窗口的默认宽度-高度。 记住一些事情。在您的应用程序开始时这样做,它将仅保留该应用程序的设置。但是,如果您随后运行Config.write(),您会将设置保存在配置文件中。

Config.set 应该在导入任何其他 Kivy 模块之前使用。理想情况下,这意味着在 main.py 脚本的开头设置它们。 或者,您可以使用永久保存这些设置 Config.set 然后Config.write。在这种情况下,您将需要重新启动 使更改生效的应用程序。请注意,这种方法将 影响系统范围内的所有 Kivy 应用。

阅读this wiki 文章了解更多信息。

【讨论】:

天哪,我太傻了。我完全错过了维基的那部分。 :\ 但是你能解释一下如果我在开始时 Config.set 的意思,它只会保留那个应用程序的设置吗? @ParthibBiswas 如果您不进行Config.write() 调用,它不会将设置应用于所有应用程序,仅针对此应用程序,这可能是您想要的。【参考方案2】:

实际上有很多方法可以做到这一点,也就是说其中许多方法取决于您编写代码的方式,并且由于您没有给我们一个示例,我只能向您展示基本示例...

举例来说,你没有使用 kivy deign 语言,而你正在使用直接 python 进行项目,你可以通过以下方式设置一个 Root 小部件

Root = Widget(size = (500,500))

您也可以避免这种情况,例如简单地这样做

Window.size = (500, 500)

现在,如果您使用的是 kv 设计语言,这很容易,只是您需要在 .kv 文件中设置画布、矩形等的大小。

正如@Leva7 提到的,你也可以使用例如

from kivy.config import Config
Config.set('graphics', 'resizable', '0') #0 being off 1 being on as in true/false
Config.set('graphics', 'width', '500')
Config.set('graphics', 'height', '500')

注意上面的(即Config.set())应该放在源代码顶部靠近import的部分!

【讨论】:

【参考方案3】:

你可以在 kivy-1.10.0+ 上这样给予

import kivy
from kivy.app import App
from kivy.core.window import Window
from kivy.config import Config
kivy.config.Config.set('graphics','resizable', False)



class MyApp(App):
    def build(self):
        Window.size = (1280,720)
MyApp().run()

【讨论】:

【参考方案4】:

默认情况下,上述配置不适用于 RPi。

Window.size(500,500)

无效。 如果有人需要禁用全屏并希望完全控制其 RPi 上的屏幕大小:

disable kivy fullscreen

要做的步骤:

sudo raspi-config 

Advanced Options ->
GL Driver ->
G1 GL (Full KMS)->
OK ->
Reboot

使用 Python3.5 在 RPi 3B Stretch 上测试

【讨论】:

【参考方案5】:

固定大小的一种不吸引人的方法是添加事件侦听器。

from kivy.core.window import Window

_fixed_size = (425, 700) #desired fix size

def reSize(*args):
   Window.size = _fixed_size
   return True
Window.bind(on_resize = reSize)

【讨论】:

以上是关于固定 Kivy 程序的窗口大小的主要内容,如果未能解决你的问题,请参考以下文章

Kivy - 如何根据显示大小设置窗口大小?

设置kivy窗口大小不起作用

Kivy 如何创建一个可根据内容调整大小的弹出窗口?

Config 设置窗口大小 Kivy 的最小值和最大值

Delphi中如何固定窗口大小

在 Kivy 中针对不同设备的应用