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

问题描述 投票:-1回答:1

嗨,我是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,0,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
button widget kivy bind
1个回答
0
投票

您的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
© www.soinside.com 2019 - 2024. All rights reserved.