【问题标题】:Kivy screenmanager current screen not switching (at least not visually). Using kivymdKivy screenmanager 当前屏幕没有切换(至少在视觉上没有)。使用 kivymd
【发布时间】:2022-01-11 20:13:20
【问题描述】:

我正在使用 python、kivymd 和 kivy 的屏幕管理器切换登录系统,但是,当我尝试将屏幕从登录屏幕切换到另一个屏幕时,没有任何反应,没有错误,也没有视觉变化。这是一个可重现的例子:

.py 文件

import kivy
from kivy.uix.image import Image
from kivy.uix.screenmanager import ScreenManager, Screen

from kivy.lang import Builder
from kivymd.app import MDApp

class Screen1(Screen):
    def SwitchScreen(self):
        scrMng.current = "screen2"

class Screen2(Screen):
    def SwitchScreen(self):
        scrMng.current = "screen1"

scrMng = ScreenManager()
scrMng.add_widget(Screen1(name = "screen1"))
scrMng.add_widget(Screen2(name = "screen2"))

class TestApp(MDApp):
        def build(self):
            return Builder.load_file("main.kv")


TestApp().run()

.kv 文件

ScreenManager:
    Screen1:
    Screen2:

<Screen1>
    name: "screen1"
    
    MDCard:
        size_hint: None, None
        size: 300, 350
        pos_hint: {"center_x": 0.5, "center_y": 0.5}
        elevation: 10
        padding: 25
        spacing: 25
        orientation: 'vertical'

        MDLabel:
            text: "Screen2"
            font_size: 40
            halign: "center"
            font_bold: True
            theme_text_color: "Custom"
            text_color: (0.20, 0.33, 1.00, 1)

        MDRoundFlatButton:
            text: "SWITCH"
            font_size: 12
            pos_hint: {"center_x": 0.5}
            on_press: self.parent.parent.SwitchScreen()

<Screen2>
    name: "screen2"
    
    MDCard:
        size_hint: None, None
        size: 300, 350
        pos_hint: {"center_x": 0.5, "center_y": 0.5}
        elevation: 10
        padding: 25
        spacing: 25
        orientation: 'vertical'

        MDLabel:
            text: "Screen1"
            font_size: 40
            halign: "center"
            font_bold: True
            theme_text_color: "Custom"
            text_color: (0.20, 0.33, 1.00, 1)

        MDRoundFlatButton:
            text: "SWITCH"
            font_size: 12
            pos_hint: {"center_x": 0.5}
            on_press: self.parent.parent.SwitchScreen()

Python 版本:3.9.9 Kivy 版本:2.0.0

感谢任何帮助!

【问题讨论】:

标签: python windows kivy


【解决方案1】:

您正在使用以下行创建 GUI:

scrMng = ScreenManager()
scrMng.add_widget(Screen1(name = "screen1"))
scrMng.add_widget(Screen2(name = "screen2"))

但上面创建的scrMng 从未使用过,因此可以消除这些行。并且在 python 代码中对scrMng 的引用将不起作用,因为scrMng 实际上并不是您的应用程序的一部分。

您的 GUI 实际上是由以下行创建的:

return Builder.load_file("main.kv")

那么Screen类可以变成:

class Screen1(Screen):
    def SwitchScreen(self):
        self.manager.current = "screen2"

class Screen2(Screen):
    def SwitchScreen(self):
        self.manager.current = "screen1"

请注意,Screen 类中的self.manager 始终是对其ScreenManager 的引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多