KivyMDscanner_manager.current 多个返回值
Posted
技术标签:
【中文标题】KivyMDscanner_manager.current 多个返回值【英文标题】:KivyMD scanner_manager.current multiple return values 【发布时间】:2021-11-30 04:28:18 【问题描述】:我在python kivyMD中做一个应用,遇到了一个我无法解释的奇怪现象。一定是对这个API缺乏了解或者有什么我不理解的地方。
当我打印变量scanner_manager.current
时,问题就开始了。我想知道scanner_manager.current == "home"
的时间,以便我可以做出一个条件,即当您在导航栏中单击主页时,什么都不会发生。这可以防止应用在您单击主页并且您已经在主屏幕时重复重新加载。
下面是python文件。
import kivy
from kivy.app import App
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.uix.screenmanager import ScreenManager
from kivymd.uix.screen import MDScreen
from kivy.properties import ObjectProperty
class HomeScreen(MDScreen):
pass
class AboutScreen(MDScreen):
pass
class DeveloperScreen(MDScreen):
pass
class WindowManager(ScreenManager):
screen_manager = ObjectProperty(None)
class MyApp(MDApp):
def build(self):
self.root_widget = Builder.load_file("style.kv")
return self.root_widget
if __name__ == "__main__":
MyApp().run()
style.kv
Screen:
MDToolbar:
id: toolbar
pos_hint: "top": 1
elevation: 10
title: "My application"
left_action_items: [["menu", lambda x: nav_drawer.set_state("toggle")]]
MDNavigationLayout:
WindowManager:
id:screen_manager
HomeScreen:
AboutScreen:
DeveloperScreen:
MDNavigationDrawer:
id: nav_drawer
BoxLayout:
orientation: "vertical"
ScrollView:
MDList:
OneLineListItem:
text:"Home"
on_touch_down:
screen_manager.current = "home"
print(screen_manager.current)
OneLineListItem:
text: "About"
on_touch_down:
screen_manager.current = "about"
print(screen_manager.current)
OneLineListItem:
text: "Developer options"
on_touch_down:
screen_manager.current = "dev"
print(screen_manager.current)
nav_drawer.set_state("close")
<HomeScreen>:
name: "home"
BoxLayout:
orientation: "vertical"
MDLabel:
text: "Welcome to the Home Screen!"
halign: "center"
<AboutScreen>:
name: "about"
BoxLayout:
orientation: "vertical"
MDLabel:
text: "Welcome to the About Screen!"
halign: "center"
<DeveloperScreen>:
name: "dev"
BoxLayout:
orientation: "vertical"
MDLabel:
text: "Welcome to the Developer Screen!"
halign: "center"
当点击主页按钮时,输出是:
dev
about
home
点击时:
dev
about
点击开发者选项时:
dev
问题是,这是怎么回事?为什么scanner_manager.current
在转到正确的屏幕之前会跳转到多个屏幕?当一次又一次地点击同一个屏幕时,如何禁止应用程序重新加载?感谢您的帮助。
【问题讨论】:
【参考方案1】:您正在使用on_touch_down
作为事件来触发您的Screen
更改和您的print
。但是on_touch_down
事件会在每次Button
点击时发送到每个小部件。解决方法是改用on_press
,它只有在点击特定的OneLineListItem
时才会触发。因此,只需将 kv
中的 on_touch_down
更改为 on_press
。
【讨论】:
谢谢!!这清楚地回答了我的问题。以上是关于KivyMDscanner_manager.current 多个返回值的主要内容,如果未能解决你的问题,请参考以下文章