Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在kivy中的两个屏幕类之间传递变量_Python_Class_Kivy - Fatal编程技术网

Python 在kivy中的两个屏幕类之间传递变量

Python 在kivy中的两个屏幕类之间传递变量,python,class,kivy,Python,Class,Kivy,我有两个screen类ScreenOne和ScreenTwo,我想在它们之间传递一个值。我正在使用ScreenManager,我正在使用self.manager.current()=“screen2” 我希望在不使用.kv文件的情况下执行此操作。我不是编程新手,但我是kivy新手,我没想到这会如此复杂。我是否可以通过另一个管理器函数或类似的方式传递值 class ScreenOne(Screen): def __init__(self,**kwargs):

我有两个screen类
ScreenOne
ScreenTwo
,我想在它们之间传递一个值。我正在使用ScreenManager,我正在使用self.manager.current()=“screen2”

我希望在不使用.kv文件的情况下执行此操作。我不是编程新手,但我是kivy新手,我没想到这会如此复杂。我是否可以通过另一个管理器函数或类似的方式传递值

    class ScreenOne(Screen):

        def __init__(self,**kwargs):
            super (ScreenOne,self).__init__(**kwargs)

            my_box1 = GridLayout(cols=3,spacing=50,size_hint_y=None,size_y=100,)
            my_box1.bind(minimum_height=my_box1.setter('height'))

            drink_list = get_drink_list()

            for drink in drink_list:
                button = Button(text=drink,
                    size_hint_y=None, height=250, background_normal=get_drink_image(drink),font_size='15dp',color=[0,0,0,1])
                button.bind(on_press=self.changer)
                my_box1.add_widget(button)

            root = ScrollView(size_hint=(None, None), size=(600, 400),
                pos_hint={'center_x':.5, 'center_y':.5},bar_width='10dp')
            root.add_widget(my_box1)
            self.add_widget(root)

        def changer(self, instance,*args):
            self.manager.current = instance.text #button name

class ScreenTwo(Screen):

    def __init__(self,**kwargs):
        super (ScreenTwo,self).__init__(**kwargs)

        # print drink_ordered
        #creating layouts
        my_box1 = GridLayout(cols=2)
        description_box = BoxLayout(orientation='vertical', spacing=30)

        #creating objects
        drink_image = Image(source="drink_pics/" + self.name + ".jpg")
        drink_name = Label(text=self.name,font_size='24dp',size_hint_y=None, height=100)
        empty_box = Label(text="",font_size='24dp',size_hint_y=None, height=20)

        ingredient_list = get_drink_ingredients(self.name)
        description = ''

        for count in range(len(ingredient_list)):
            if ((count % 3 == 0) and (count != 0)):
                description += "\n"

            description += ingredient_list[count] + ", "

        description = description[:-2]
        description = description.replace('_', ' ')

        drink_description = Label(text="Description: " + description,font_size='15dp'
            ,size_hint_y=None, height=100)
        drink_order = Button(text="Order Drink",
                size_hint_y=None, height=100, size_hint_x=None, width=385, padding=[100,100])
        drink_order.bind(on_press=self.changer)

        #adding to widgets
        my_box1.add_widget(drink_image)
        description_box.add_widget(drink_name)
        description_box.add_widget(drink_description)
        description_box.add_widget(drink_order)
        description_box.add_widget(empty_box)
        my_box1.add_widget(description_box)
        self.add_widget(my_box1)

    def changer(self,*args):
        self.manager.current = 'next screen'

你能发布你的代码吗?我添加了代码,但是,我现在实现它的方式真的很糟糕。在ScreenOne的changer函数中,我想将变量传递给ScreenTwo,并传递按钮名(instance.text)。我不确定您想要什么。如果只是将变量从一个屏幕
ScreenOne
传递到另一个屏幕
ScreenTwo
,您可以使用
self.manager.get_screen('screen2'))…
在ScreenOne中。好的,我可以在ScreenOne中放入一个变量,比如self.test,然后在ScreenTwo中调用self.manager.get_screen('screen1')之类的变量.test?是的,这是一种方法。你能发布你的代码吗?我添加了代码,但是,我现在实现它的方法真的很糟糕。在ScreenOne的changer函数中,我想将变量传递给ScreenTwo,并传递按钮名(instance.text)。我不确定您想要什么。如果只是将变量从一个屏幕
ScreenOne
传递到另一个屏幕
ScreenTwo
,您可以使用
self.manager.get_screen('screen2'))…
在ScreenOne内部。好的,我可以在ScreenOne中放入一个变量,比如self.test,然后在ScreenTwo中调用self.manager.get_screen('screen1')。test?是的,这是一种方法。