Kivy关于将多个按钮绑定到每个单独的功能

嗨,我是Kivy的新手,刚刚开始编程。我有问题,我想将在for循环中创建的所有按钮绑定到每个按钮的on_release。这样一来,单击所有按钮即可进入不同的屏幕。以下是我的代码的一小部分(我编辑了更多信息)

    #this are the pictures of the buttons
    a = '_icons_/mcdonald2.png'
    b = '_icons_/boostjuice.png'
    c = '_icons_/duckrice.png'
    d = '_icons_/subway_logo.png'
    e = '_icons_/bakery.png'
    f = '_icons_/mrbean.png'

    #these are the names of the different screen 
    n1 = 'mcdonald_screen'
    n2 = 'boost_screen'
    n3 = 'duck_screen'
    n4 = 'subway_screen'
    n5 = 'bakery_screen'
    n6 = 'mrbean_screen'

    arraylist = [[a,n1],[b,n2],[c,n3],[d,n4],[e,n5],[f,n6]]
    self.layout2 = GridLayout(rows=2,spacing = 50,size_hint = (0.95,0.5),pos_hint = {"top":.65,"x":0},padding=(90,50,0))
    for image in arraylist:
        self.image_outlet = ImageButton(
            size_hint=(1,0.1),source= image[0])

        self.screen_name = image[1]
        self.image_outlet[0].bind(on_release= ??) ## This part is the one  
                                                     i want to change 
                                                     according to the 
                                                     different screen
        self.layout2.add_widget(self.image_outlet)
    self.add_widget(self.layout2)


GUI = Builder.load("_kivy_/trying.kv")
class TRYINGApp(App):
    def build(self):
        return GUI
    def change_screen(self,screen_name):
        screen_manager = self.root.ids['screen_manager']
        screen_manager.current = screen_name

#kv file#
# all the varies kv file screen
#: include _kivy_/variestime_screen.kv
#: include _kivy_/homescreen.kv
#: include _kivy_/mcdonaldscreen.kv
#: include _kivy_/firstpage.kv
#: include _kivy_/mrbeanscreen.kv
#: include _kivy_/boostscreen.kv
#: include _kivy_/duckscreen.kv
#: include _kivy_/subwayscreen.kv
#: include _kivy_/bakeryscreen.kv


GridLayout:
    cols:1
    Screenmanager:
        id : screen_manager
        FirstPage:
            name :"first_page"
            id : first_page

        VariesTimeScreen:
            name: "variestime_screen"
            id: variestime_screen

        HomeScreen:
            name : "home_screen"
            id : home_screen

        McDonaldScreen:
            name : "mcdonald_screen"
            id : mcdonald_screen

        BoostScreen:
            name : "boost_screen"
            id : boost_screen

        DuckScreen:
            name: "duck_screen"
            id: duck_screen

        SubwayScreen:
            name:"subway_screen"
            id: subway_screen

        BakeryScreen:
            name: "bakery_screen"
            id: bakery_screen

        MrBeanScreen:
            name: "mrbean_screen"
            id : mrbean_screen
mmmnnnwo 回答:Kivy关于将多个按钮绑定到每个单独的功能

您的on_release可能类似于:

self.image_outlet.bind(on_release=partial(self.change_screen,image[1]))

其中change_screen是必须定义的方法:

def change_screen(self,new_screen_name,button_instance):
    # some code to change to the screen with name new_screen_name

请注意,我已经从[0]中删除了self.image_outlet(我怀疑这是一个错字)。由于您没有提供足够的信息,我无法确定新方法应使用什么代码。

如果您的change_screen类中有一个App方法,则可以通过在on_release中以如下方式引用它来直接使用该方法:

self.image_outlet.bind(on_release=partial(App.get_running_app().change_screen,image[1]))

您将需要对change_screen方法做些小的改动以处理其他参数:

def change_screen(self,screen_name,*args):
    screen_manager = self.root.ids['screen_manager']
    screen_manager.current = screen_name
本文链接:https://www.f2er.com/3131798.html

大家都在问