更改两个不同 kivy 屏幕的大小

Posted

技术标签:

【中文标题】更改两个不同 kivy 屏幕的大小【英文标题】:Changing size of two different kivy screens 【发布时间】:2017-07-22 23:04:00 【问题描述】:

我在 Kivy 程序中有两个屏幕。第一个代表登录屏幕,所以需要小一些,而另一个有数据,所以我需要让它全屏。

我尝试使用

from kivy.config import Config
Config.set('graphics', 'width', '350')
Config.set('graphics', 'height', '250')

但是,问题在于另一个屏幕的尺寸也减小了,如果你知道我需要做什么来为不同的屏幕设置不同的尺寸,请帮助我,谢谢。

【问题讨论】:

How to change window size?的可能重复 不,不是,我在这里尝试更改两个不同窗口的大小,而不是单个窗口(上述问题的答案) 【参考方案1】:

我今天早些时候回答了几乎相同的问题。像这样编写你的python代码:

from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.core.window import Window

class Screen_Manager(ScreenManager):
    pass

class Main(Screen):
    def __init__(self, **kwargs):
        super(Main, self).__init__(**kwargs)

    def on_pre_enter(self):
        Window.size = (900, 500)     

class Login(Screen):
    def __init__(self, **kwargs):
        super(Login, self).__init__(**kwargs)

    def on_pre_enter(self):
        Window.size = (400, 300)


class MultiScreenApp(App):
    def build(self):
        return Screen_Manager()

MultiScreenApp().run()

使用类似于这样的 multiscreen.kv 文件:

<Screen_Manager>:
    id: screen_manager
    Login:
    Main:

<Login>:
    name: 'login'
    Button:
        text: 'Go to Main'
        on_press: root.manager.current = 'main'

<Main>:
    name: 'main'
    Button:
        text: 'Go to Login'
        on_press: root.manager.current = 'login'

【讨论】:

【参考方案2】:

定义一个类似的方法

from kivy.core.window import Window

def update_window_size(width, height):
    # Validate width and height then
    Window.size = (width, height)

并以所需的高度和宽度在任何你想要的地方调用它。

___ 编辑 1 - 添加示例。在Screen的初始化中更改屏幕大小

from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.core.window import Window

sm = ScreenManager()


class Main(Screen):
    def __init__(self):
        super(Main, self).__init__()


class Login(Screen):
    def __init__(self):
        super(Login, self).__init__()
        # Change login screen size in it's __init__
        update_window_size(250, 250)


def update_window_size(width, height):
    # Validate width and height then
    Window.size = (width, height)


class MyApp(App):
    def build(self):
        return sm

MyApp().run()

【讨论】:

非常感谢,但我对 Kivy 还很陌生,能否请您举例说明一下,例如 O 有两个用于两个屏幕的类: 的类 LoginScreen(Screen): 和 的类 DataDisplayScreen(class) 我应该如何前进?谢谢 @Mahdi 我添加了一个带有两个屏幕的示例 再次感谢您的努力,但我收到此错误:child = cls(__no_builder=True) TypeError: __init__() got an unexpected keyword argument '__no_builder'

以上是关于更改两个不同 kivy 屏幕的大小的主要内容,如果未能解决你的问题,请参考以下文章

Kivy - 通过引用根属性动态添加按钮

如何在 Kivy 中从 python 代码更改屏幕

Kivy,根据屏幕名称更改工具栏标题

从 Kivy 的另一个屏幕更改小部件

Kivy:使用 on_press 事件在屏幕管理器中更改屏幕

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