Python Kivy:在带有文本的Label和带有按钮的BoxLayout之间切换

时间:2018-05-07 23:57:07

标签: python kivy

编辑:

长话短说,我正在寻找一种将Label小部件切换为按钮的方法。我有一个带有文本的标签,我想把它变成4个按钮(2x2),并且能够在两者之间切换。

我开始选择你自己的冒险游戏,并且在构思游戏的最佳方法时遇到一些麻烦,这种方法对于设备/计算机来说效率高,而且费用低。这个想法是你通过一些对话,拿着对话框的容器然后有选择的按钮。我想找到在通过对话和做出选择之间切换的最佳方式。我想出了一些想法,其中一些包括编写代码,以便在添加和删除按钮按下小部件时,另一个想法(更容易实现但可能效率低下),是创建一个全新的屏幕,仅用于用于做出选择,除了用于保存文本标签的中间小部件之外,一切都是相同的,但现在将包含一个垂直BoxLayout,其中有4个按钮内有两个BoxLayout。这是.kv文件中的代码:

#:import FadeTransition kivy.uix.screenmanager.FadeTransition

<RootScreen>:
    transition: FadeTransition() 
    StartScreen:
    LevelOneBedroomScreen:
    LevelOneBedroomScreenchoice:

<StartScreen>:
    name: 'start'
    canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
            source: 'start_screen.png'
    FloatLayout:
        Image:     
            source: 'start_screen.png'
            allow_stretch: True
            keep_ratio: False
            size_hint: 1, 1
        Button:
            text: 'Start'
            size_hint: 0.4, 0.3
            pos_hint: {'center_x':.5, 'center_y':.5}
            font_size: 70
            on_release: root.manager.current = 'level one bedroom'                  
<LevelOneBedroomScreen>:
    name: 'level one bedroom'
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'Image of Bedroom'
        Label:
            text: 'Dialogue Text'
    BoxLayout:
        size_hint_y: .2
        Label:
            text: 'left arrow'
        Button:
            text: 'choose'  
            on_release: root.manager.current = 'level one bedroom choice'           
        Label:
            text: 'right arrow'         
<LevelOneBedroomScreenChoice>:
    name: 'level one bedroom choice'
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'Image of Bedroom'
        BoxLayout:
            orientation: 'vertical'
            BoxLayout:
                Button:
                    text: 'choice 1'
                Button:
                    text: 'choice 2'
            BoxLayout:
                Button:
                    text: 'choice 3'
                Button:
                    text: 'choice 4'
    BoxLayout:
        size_hint_y: .2
        Label:
            text: 'left arrow'
        Button:
            text: 'home'    
            on_release: root.manager.current = 'level one bedroom'          
        Label:
            text: 'right arrow' 

这是一个粗略的想法,代码的结构可能会改变,但我只是开始概念化逻辑,我想知道是否有更好的方法(可能有)。我会出去几个小时,但是当我回来时能够回复任何回复,谢谢你的高级版,如果我没有包含相关信息或者如果这个查询不适合本网站,我道歉,我我还是Python的新手(以及一般的编码),也是Kivy的新手。

编辑: 我的最后一个想法是在屏幕上做一个专门的区域来做出选择,但如果可能的话,我希望能够在对话和按钮之间切换以获得更时尚的感觉。

1 个答案:

答案 0 :(得分:0)

为什么不转向RecycleView?它的内容是由数据动态控制的小部件(特别是dicts列表),并且可以处理其中的小部件的任何组合。