Kivymd-从底部工具栏更改屏幕不起作用

埃德·乔治

当用户按下底部的图标时,我试图提出一种逻辑来更改屏幕。我可以使用“测试”按钮来更改它的屏幕,但是底部工具栏图标有困难。下面是我的代码。当我按下第二个图标时,其打印的“ Hello”表示代码似乎可以正常工作,但我感觉缺少连接到不同屏幕的kivy功能。请让我知道我在做什么错。

from kivymd.app import MDApp
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.lang import Builder
from kivymd.uix.floatlayout import FloatLayout
from kivymd.uix.textfield import MDTextField

# Builder String
allLayout  = '''
ScreenManager:
    MainPage:
    #List:
    #History:
    StudentName:
    #Support:
    #FAQ:
    #TermsAndConditions:
    #MyAccount:
    
<Button@MdButton>: 
    font_size: 20
    background_color: 144/235,252/255,144/255,1
    size_hint: 0.32, 0.07

<Ticker@MDTextField>:
    font_size: 20
    hint_text: "Enter student Name"
    icon_right: 'database-search'
    helper_text: "From the list (2nd icon in bottom bar)"
    helper_text_mode: 'on_focus'
    size_hint_x : None
    width:200
<MainPage>:
    name: 'mainpage1'
    NavigationLayout:
        ScreenManager:
            Screen:
                BoxLayout:
                    orientation:'vertical'
                    MDToolbar:
                        title: 'Main Page'
                        elevation: 10
                        right_action_items: [["dots-vertical", lambda x: x]]
                           # on_action_button: app.callback(self.icon)
                    Widget: #if you delete this line... you will spend hours figuring out like before
                    MDBottomAppBar:
                        MDToolbar:
                            icon: "history"
                            text_color: 0,0,0,0
                            icon_size: 0.5                            
                            type: "bottom"
                            mode: "end"
                            left_action_items: [["home", lambda x: x], ["view-list", lambda x: app.listScreen()],  ["watch", lambda x: x], ["help", lambda x: x]]
                           

    Button:
        text:"Class 1"
        pos_hint: {'x': 0.025, 'y':.8}
    Button:
        text:"Class 2"
        pos_hint: {'x': 0.345, 'y':.8}
    Button:
        text:"Class 3"
        pos_hint: {'x': 0.665, 'y':.8}
    Ticker:
        pos_hint: {'x':0.025, 'y': .7}
    Button:
        text:"Test"
        pos_hint: {'x': 0.665, 'y':.6}
        on_release:
            root.manager.current = 'student'
    
<StudentName>:
    name: 'student'
    MDLabel:
        text: "Hi"
'''''

class MainPage(Screen):
    pass
class StudentName(Screen):
    pass

sm = ScreenManager()
sm.add_widget(MainPage(name = 'mainpage1'))
sm.add_widget(StudentName(name = 'student'))

class DemoApp(MDApp):
    def listScreen(self):
        
        self.current = StudentName()
        print("Hello")
     #   root.manager.transition.direction = 'left'
       
    def build(self):
        self.theme_cls.primary_palette = 'Lime'
        self.theme_cls.primary_hue = 'A700'
        screen = Screen()
        main_code = Builder.load_string(allLayout)
        screen.add_widget(main_code)
       return screen
DemoApp().run()
        
约翰·安德森

代码中发生了几件奇怪的事情。一种是代码:

sm = ScreenManager()
sm.add_widget(MainPage(name = 'mainpage1'))
sm.add_widget(StudentName(name = 'student'))

正在创建ScreenManager并添加Screens到其中。但是,然后不使用created ScreenManagersm)。可以删除这些行。

另一个是build()方法代码:

    screen = Screen()
    main_code = Builder.load_string(allLayout)
    screen.add_widget(main_code)
    return screen

这段代码使用来构建整个显示器Builder.load_string()该显示ScreenManager的根为(如字符串所定义allLayout)。然后将ScreenManager其添加到Screenscreen.add_widget(main_code)),然后将Screen其返回到App根窗口。我怀疑这不是您想要的,但这完全是法律法规。我怀疑该build()方法实际上应该是:

def build(self):
    self.theme_cls.primary_palette = 'Lime'
    self.theme_cls.primary_hue = 'A700'
    main_code = Builder.load_string(allLayout)
    return main_code

上面的代码使ScreenManagerApp的根目录显示出来。

最后一个问题是listScreen()方法。该行:

self.current = StudentName()

正在创建的新实例,Student然后将其赋值给一个名为变量currentDemoApp类。我怀疑您实际上想这样更改Screens

def listScreen(self):
    self.root.current = 'student'
    print("Hello")

此代码将current应用程序根目录(即ScreenManager属性设置StudentName该类的现有实例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章