【问题标题】:Python Kivy: How to add multiple widgets in a loopPython Kivy:如何在循环中添加多个小部件
【发布时间】:2017-07-25 12:25:40
【问题描述】:

我对 Python 比较陌生,对 Kivy 完全陌生,所以我正在努力解决一个可能很简单的任务。我需要一个带有两个按钮的主屏幕:Button1 和 Button2。当我按下一个按钮时,第二个屏幕应该会再次显示按钮的数量。第二个屏幕上的按钮数量是动态的,但为了简单起见,我们可以假设我们知道这一点。

python 代码:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

buttons = {}
buttons['Button 1'] = ('A Button 1', 'A Button 2')
buttons['Button 2'] = ('B Button 1', 'B Button 2', 'B Button 3')

class SelectButton(BoxLayout):

    def show_buttons(self, button):

        self.clear_widgets() # I guess I need this

        #Here question comes: how to add button widgets buttons[button]?
        #Shall I do this in the loop in Python code or in .kv file?
        #for item in buttons[button]:
        #    print (item)

class TestApp(App):
    pass

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

.kv 文件:

SelectButton:

<SelectButton>:
    orientation: "vertical"
    Label:
        size_hint_y: 0.15
        text: "Select Button"
    BoxLayout:
        Button:
            text: "Button 1"
            on_press: root.show_buttons(self.text)
        Button:
            text: "Button 2"
            on_press: root.show_buttons(self.text)

【问题讨论】:

  • 你有什么问题?
  • 问题是,如果要添加的按钮数量是动态的,我该如何使用我应该定义所有图形元素的 .kv 文件来做到这一点?
  • 我不是 kivy 专家,当我使用它时,我故意避免使用 kivy 语言......但我认为你别无选择,只能在 Python 代码中定义它们。老实说,您能否在 .kv 中动态创建它们,在 Python 中可能仍然更容易。

标签: python kivy kivy-language


【解决方案1】:

如果它真正动态那么你应该用python来做。

def show_buttons(self, button):

    self.clear_widgets() # I guess I need this


    for item in buttons[button]:
        self.add_widget(Button(text=item))

如果它不是动态,我建议创建更多屏幕,并在使用ScreenManager按下第一个按钮时切换到它们 p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2016-08-20
    相关资源
    最近更新 更多