【问题标题】:Kivy Screen Manager: Binding Dynamically Added ButtonsKivy 屏幕管理器:绑定动态添加的按钮
【发布时间】:2020-12-28 02:13:39
【问题描述】:

我有下面的代码来显示 USB 中的 .txt 文件,需要单独访问所有这些文件。所有文件都显示在滚动视图中,但我不明白如何实际使用或按下这些按钮转到另一个屏幕。每个都需要绑定到一个新的屏幕。

            self.file_name = os.listdir(TXT)
            layout = BoxLayout(orientation = 'vertical')
            base = ["element {}".format(i) for i in range(len(os.listdir(TXT)))]
            layout = GridLayout(cols = 1, spacing = 10, size_hint_y = None)
            layout.bind(minimum_height = layout.setter("height"))

            L = [x for x in range(len(os.listdir(TXT)))]
            for x in L:
                layout.add_widget(Button(text=self.file_names[x]))
            scrollview = ScrollView(size_hint=(.5, None), size = (Window.width, Window.height), pos_hint={'x':.265, 'center_y': .5})
            scrollview.add_widget(layout)
            self.add_widget(scrollview) 

【问题讨论】:

    标签: python user-interface kivy kivy-language


    【解决方案1】:

    您可以在定义按钮时使用on_press,然后使用 lambda 定义您可以在按下按钮时运行的函数。

    for i in L:
        layout.add_widget(Button(text=self.file_names[x], on_press: lambda x: some_function()))
    

    此外,如果您的函数将 i(或代码中的 x)作为参数,那么您必须这样做:

    for i in L:
        layout.add_widget(Button(text=self.file_names[x], on_press: lambda x,y=i: some_function(i)))
    

    否则它将只取i的最后一个值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多