簡體   English   中英

Kivy 屏幕管理器當前屏幕沒有切換(至少在視覺上沒有)。 使用 kivymd

[英]Kivy screenmanager current screen not switching (at least not visually). Using kivymd

我正在使用 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

任何幫助都值得贊賞!

您正在使用以下行創建 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中的 self.manager 始終是對其ScreenManager的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM