首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sm.current不切换屏幕

sm.current不切换屏幕
EN

Stack Overflow用户
提问于 2021-06-12 16:25:52
回答 1查看 31关注 0票数 0

我是Kivy / MD平台的新手,正在尝试构建一个简单的登录屏幕,但不幸的是,在身份验证部分,屏幕管理器没有切换到选择屏幕。有人能帮帮我吗?

我的test.kv文件如下所示

代码语言:javascript
复制
windowManager:
    Welcome:
    SelectionOption:


<Welcome>:
    id: welcome
    name: 'welcome'
    manager: 'sm'
    emailInput: emailInput
    passwordInput: passwordInput
    MDScreen :
        md_bg_color : [102/255,153/255,153/255,1]
        MDCard :
            size_hint : None, None
            size : 300, 450
            pos_hint : {"center_x":.5,"center_y":.5}
            padding : 20
            spacing : 30
            orientation : "vertical"

            MDLabel :
                text : 'Manager'
                font_style : 'Overline'
                font_size : 30
                halign : "center"
                size_hint_y : None
                height : self.texture_size[1]
                padding_y : 10

            MDTextFieldRound :
                id: emailInput
                hint_text : "Email address"
                icon_right : "account"
                size_hint_x : None
                width : 220
                font_size : 15
                pos_hint : {"center_x":.5}
                color_active : [0.2,0.2,0.1,1]
                TextInput:
                    multiline: False

            MDTextFieldRound :
                id: passwordInput
                hint_text : "password"
                icon_right : "eye-off"
                size_hint_x : None
                width : 220
                font_size : 15
                pos_hint : {"center_x":.5}
                color_active : [0.2,0.2,0.1,1]
                password : True
                TextInput:
                    multiline: False

            MDRoundFlatButton :
                text : 'Login'
                pos_hint : {'center_x':0.5, 'center_y':0.5}
                font_size : 20
                text_color: 0, 0, 0, 0
                on_press:
                    root.validatelogin()

            MDRoundFlatButton :
                text: 'NEW USER'
                pos_hint: {'center_x':.5, 'center_y':0.4}
                font_size: 20
                text_color: 0, 0, 0, 0
                on_press:
                    root.signup()

            Widget :
                size_hint_y : None
                height : 30

<SelectionOption>:
    info : info
    name : 'selection'
    MDLabel:
        id: info
        text : 'Selection Option'
        font_style : 'Overline'
    MDRoundFlatButton :
        text: 'Login'
        pos_hint : {'center_x':0.5, 'center_y':0.5}
        font_size : 20
        text_color: 0, 0, 0, 0

并且验证函数看起来像下面这样

代码语言:javascript
复制
from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.core.window import Window
from kivy.properties import ObjectProperty

Window.size = (350, 580)

class Welcome(Screen):
    emailInput = ObjectProperty(None)
    passwordInput = ObjectProperty(None)

    def validatelogin(self):

        if self.emailInput.text == "123" and self.passwordInput.text == "123":
            sm.current = "selection"


class SelectionOption(Screen):
    pass


class windowManager(ScreenManager):
    pass


sm = windowManager()
sm.add_widget(Welcome(name='welcome'))
sm.add_widget(SelectionOption(name='selection'))


class Console(MDApp):

    def build(self):
        return Builder.load_file('../Files/test.kv')


if __name__ == '__main__':
    Console().run()
EN

回答 1

Stack Overflow用户

发布于 2021-06-12 20:30:42

sm.current = "selection"不更改当前Screen的原因是因为sm是一个ScreenManager,而不是您的图形用户界面中的那个。我最近看到了很多这样的事情。您正在构建您的GUI两次。下面这几行代码:

代码语言:javascript
复制
sm = windowManager()
sm.add_widget(Welcome(name='welcome'))
sm.add_widget(SelectionOption(name='selection'))

但是上面几行的结果实际上并没有被使用。代码运行时看到的GUI是由下面这行代码构建的:

代码语言:javascript
复制
return Builder.load_file('../Files/test.kv')

在您的build()方法中。

因此,您可以安全地删除这三行未使用的代码。

然后,当您想要更改当前的图形用户界面时,您只需要获取在您的Screen中使用的ScreenManager的引用。如果您是从某个Screens中执行此操作,则可以从Screen中获取引用。因此,在Screen中更改当前Screen的代码行可以是:

代码语言:javascript
复制
self.manager.current = "selection"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67947002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档