有两个问题:
如何使它在按下按钮时执行该函数(在我的示例中,当按下 Button_1 时,应该执行 hl 函数)?就我而言,结果是一个错误:
AttributeError:“MainMenu”对象没有属性“hl”
怎么做到的,当你点击left_action_items时,你会返回到上一个屏幕(嗯,一般如何使用它,例如,当你使用它时,会执行一个函数或变量的重新分配)?我尝试了以下选项:
left_action_items: [['arrow-left', lambda x: app.screen_manager.current = 'Screen_1']]'
并收到:
[['arrow-left', lambda x: app.screen_manager.current = 'Screen_1']]
SyntaxError:无效的语法
我实验过的一个例子:
主要.py:
from kivy.factory import Factory
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.config import Config
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen
Config.set('graphics', 'resizable', '0')
Window.size = (351, 512)
Builder.load_file('ui.kv')
class MainMenu(Screen):
def hl(self):
print('hllo')
class Basic(MDApp):
def __init__(self, **kvargs):
super(Basic, self).__init__(**kvargs)
self.title = "KivyMD Examples - Progress Loader"
self.screen_manager = Factory.ManagerScreens()
def build(self):
return self.screen_manager
Basic().run()
ui.kv:
<ManagerScreens@ScreenManager>:
MainMenu:
id: Screen_1
Dictionary:
id: Screen_2
<MainMenu@Screen>:
name: 'Screen_1'
BoxLayout:
orientation: "vertical"
padding: 30
spacing: 20
pos_hint: {'top': 1.6}
MDFillRoundFlatButton:
text: "Button_1"
on_press: root.hl()
MDFillRoundFlatButton:
text: "Button_2"
on_press: app.screen_manager.current = 'Screen_2'
<Dictionary@Screen>:
name: 'Screen_2'
MDToolbar:
size_hint_y: .08
title: "Toolbar"
md_bg_color: app.theme_cls.primary_color
left_action_items: [['arrow-left', lambda x: x]]
pos_hint: {'top':1}
BoxLayout:
orientation: "vertical"
我找到了解决示例中第一个问题的方法。事实证明,您只需要删除
@Screen.<MainMenu@Screen>:没错,我不太明白那是什么东西,但是这些功能可以正常工作:)