【问题标题】:Adding Buttons Dynamically Kivy动态添加按钮 Kivy
【发布时间】:2016-05-24 05:47:35
【问题描述】:

有点像二人组。我觉得有点傻,因为我知道我错过了一些简单的东西,但我已经找了一整天了,但什么都找不到。

第一:

我需要能够在屏幕管理器中将按钮添加到屏幕。我可以在 .kv 文件中执行此操作,但无法在 .py 文件中执行此操作,所以我知道我做错了什么。

第二:我需要将它添加到 .py 文件中(至少据我所知),因为我需要根据列表中的项目数量添加不同数量的按钮。所以我有这个测试代码,它实际上是我主要代码的一个片段。

.py:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition

class Test(ScreenManager):
    pass

class StartMenu(Screen):
    pass

class LoadMenu(Screen):
    lay = FloatLayout()
    lay.add_widget(Button(text = 'Hi'))


class TestApp(App):
    def build(self):
        return Test()

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

和 .kv 文件:

<Test>:    

    StartMenu:
        name: 'start_menu'

        FloatLayout:

            Button:

                size_hint: (.5, .10)
                pos_hint: {'center_x': .5, 'center_y' : .90}
                text: 'Play'
                color: [1, 0, 0, 1]

                font_size: self.height * 5/6
                border: [25, 25, 25, 25]
                on_press: root.current = 'load_menu'

    LoadMenu:
        name: 'load_menu'

所以这只是给我一个带有按钮的屏幕,当我点击它时,它会让我进入黑屏。正如我所说,我可以让加载菜单显示按钮,但这只是使用 .kv 文件。 至于动态添加按钮,for 循环是否有效?

L=['save 1', 'save 2', 'save 3']
for x in L:
    add_widget(Button(title = L[x]))

【问题讨论】:

    标签: python button dynamic add kivy


    【解决方案1】:

    这行得通。我通过更改按钮的位置进行了检查。

    LoadMenu(Screen):
        def __init__(self, **kwargs):
            super(LoadMenu, self).__init__(**kwargs)
            Clock.schedule_once(self.update)
    
        def update(self, dt):
            L = [x for x in range(len(os.listdir('saves')))]
            for x in L:
                x = self.add_widget(Button(text = os.listdir('saves')[x]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多