[英]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.