Why is switching screens not working in kivy?(为什么切换屏幕在Kivy中不起作用?)
本文介绍了为什么切换屏幕在Kivy中不起作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试切换Kivy中的屏幕,我已经被困在这一点上有一段时间了,所以我不知道发生了什么。 文本正在打印,但屏幕仍未改变。 如果有人能帮我解决这个问题,以下是python代码:
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.boxlayout import BoxLayout
from kivymd.theming import ThemableBehavior
from kivymd.uix.list import MDList
from kivy.uix.screenmanager import ScreenManager, Screen, SlideTransition
from kivymd.uix.button import MDFloatingBottomButton
Window.size = (300, 500)
class MainScreen(Screen):
def switch_button(self):
print("switching")
ScreenManager.current = "FileScreen"
class FileScreen(Screen):
pass
class app(MDApp):
data = {
'Create': 'file-document',
'Open': 'folder-open'
}
def btn(self, instance):
print('callback')
icon = instance.icon
# if you want check button, use
if isinstance(instance, MDFloatingBottomButton):
if icon == 'file-document':
print('Create')
MainScreen.switch_button(self)
elif icon == 'folder-open':
print('Open')
class ContentNavigationDrawer(BoxLayout):
pass
class DrawerList(ThemableBehavior, MDList):
pass
sm = ScreenManager()
sm.add_widget(MainScreen(name='MainScreen'))
sm.add_widget(FileScreen(name='FileScreen'))
def build(self):
self.theme_cls.primary_palette = "Red"
#self.theme_cls.accent_palette = "Teal"
screen = Builder.load_file("main.kv")
return screen
app().run()
以下是.KV
代码:
ScreenManager:
MainScreen:
FileScreen:
<MainScreen>:
name: "MainScreen"
MDFloatingActionButtonSpeedDial:
bg_hint_color: app.theme_cls.primary_light
data: app.data
root_button_anim: True
callback: app.btn
<FileScreen>:
name: "FileScreen"
MDBoxLayout:
MDLabel:
text: "test"
我希望社区能尽快帮助我,因为我已经被困了一段时间了。
推荐答案
您似乎混淆了类和实例。在switch_button()
方法中,您的代码:
ScreenManager.current = "FileScreen"
正在设置ScreenManager
类的current
属性,但current
属性是实例属性,必须在ScreenManager
的实例上设置。并且必须是管理FileScreen
Screen
的实例。
switch_button()
方法的更好编码:
class MainScreen(Screen):
def switch_button(self):
print("switching")
self.manager.current = "FileScreen"
self.manager
是对管理MainScreen
的ScreenManager
的引用,它也管理FileScreen
。
在其他地方,您在类和实例之间造成了类似的混淆:
MainScreen.switch_button(self)
同样,您需要MainScreen
的实例,而不是MainScreen
类。此行可以替换为:
self.root.get_screen('MainScreen').switch_button()
此代码使用ScreenManager
的get_screen()
方法访问MainScreen
的实例,然后调用实例方法switch_button()
。
更直接的方法是将该行替换为:
self.root.current = 'FileScreen'
这篇关于为什么切换屏幕在Kivy中不起作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:为什么切换屏幕在Kivy中不起作用?
基础教程推荐
猜你喜欢
- 在 pandas 中使用带有多重索引的.loc 2022-09-22
- 如何将RPC与Volttron配合使用 2022-09-21
- 在OpenCV中放大后,Python会捕捉图像的特定部分 2022-09-22
- 从顶点坐标创建三角网格 2022-09-21
- 使用工作区API导入方法导入数据库笔记本(动态内 2022-09-21
- Python h5py-为什么我收到广播错误? 2022-09-21
- 如何防止Groupby超越指数? 2022-09-22
- 如何在hdf5文件的多个组之间拆分数据? 2022-09-21
- 获取多索引中某个级别的最后一个元素 2022-09-22
- 跟在带量词的前瞻后面有什么作用? 2022-09-22