【问题标题】:How to move from one class to another in kivy如何在kivy中从一个班级转移到另一个班级
【发布时间】:2015-02-24 06:18:42
【问题描述】:

我正在尝试制作一个 android 应用程序...我正在尝试根据用户输入从菜单切换到服务器或客户端...但我无法从一个类切换到另一个类...主要的事情让我生气的是,ServerScreen 中的打印语句正在工作,但其他部分却没有工作……不知道为什么

代码:---

import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.screenmanager import ScreenManager, Screen



class MenuScreen(Screen):


    def __init__(self, **kwargs):

        super(MenuScreen, self).__init__(**kwargs)


        def Server(instance):
            self.clear_widgets()
            self.add_widget(Label ( text = 'Inside server function'))

            server = ServerScreen()
            #return server
            #server.function()

        self.add_widget(Label ( text = 'What Type Of Service You Want...???'))

        button1 = Button(text = 'Server',size_hint = (None,None),pos = (0,0))
        self.add_widget(button1)
        button1.bind(on_press = Server)

        button2 = Button(text = 'Client',size_hint = (None,None),pos = (100,0))
        self.add_widget(button2)
        #button2.bind(on_press = Client)




class ServerScreen(Screen):

    def __init__(self, **kwargs):
        super(ServerScreen, self).__init__(**kwargs)
        print('Inside server screen')

        self.clear_widgets()
        self.add_widget(Label (text = 'Working As A Server'))
        print("Hellooooooooooo")


sm = ScreenManager()
sm.add_widget(MenuScreen(name='Menu'))
sm.add_widget(ServerScreen(name='Server'))
#sm.add_widget(ClientScreen(name='Client'))    

class FileApp(App):

    def build(self):

        #return Menu()

        return sm

if __name__ == '__main__':
    FileApp().run()

我在哪个部分犯了错误...请指出该部分并提供我该如何解决...

输出--->
内部服务器屏幕
喂喂喂喂

【问题讨论】:

    标签: python-2.7 kivy


    【解决方案1】:

    看看我的解决方案,灵感来自恶劣的这条优秀评论:Kivy: Changing screens in screen manager with an on_press event

    import kivy
    from kivy.app import App
    from kivy.uix.widget import Widget
    from kivy.uix.label import Label
    from kivy.uix.button import Button
    from kivy.uix.screenmanager import ScreenManager, Screen
    
    
    
    
    class MenuScreen(Screen):
        def switching_function(*args):
            global sm
            sm.current = 'Server'
    
        def __init__(self, **kwargs):
    
            super(MenuScreen, self).__init__(**kwargs)
    
    
    #         def Server(instance):
    #             self.clear_widgets()
    #             self.add_widget(Label ( text = 'Inside server function'))
    #             server = ServerScreen()
    #             #return server
    #             #server.function()
    
            self.add_widget(Label ( text = 'What Type Of Service You Want...???'))
    
            button1 = Button(text = 'Server',size_hint = (None,None),pos = (0,0))
            self.add_widget(button1)
    #         button1.bind(on_press = Server)
            button1.bind(on_press = self.switching_function)
    
            button2 = Button(text = 'Client',size_hint = (None,None),pos = (100,0))
            self.add_widget(button2)
            #button2.bind(on_press = Client)
    
    
    
    
    class ServerScreen(Screen):
    
        def __init__(self, **kwargs):
            super(ServerScreen, self).__init__(**kwargs)
            print('Inside server screen')
    
            self.clear_widgets()
            self.add_widget(Label (text = 'Working As A Server'))
            print("Hellooooooooooo")
    
    
    sm = ScreenManager()
    sm.add_widget(MenuScreen(name='Menu'))
    sm.add_widget(ServerScreen(name='Server'))
    #sm.add_widget(ClientScreen(name='Client'))    
    
    class FileApp(App):
    
        def build(self):
    
            #return Menu()
    
            return sm
    

    问题出在server = ServerScreen()里面

       def Server(instance):
            self.clear_widgets()
            self.add_widget(Label ( text = 'Inside server function'))
            server = ServerScreen()
            #return server
            #server.function()
    

    它会创建一个新的 ServerScreen,而不是当前实际显示的 ServerScreen(所以

    Inside server screen
    Hellooooooooooo
    

    已显示,但 ScreenManager 不知道此附加屏幕是否存在。

    【讨论】:

    • 感谢您的解决方案..@ThiPhi...您的解决方案完美运行
    猜你喜欢
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2023-03-21
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多