在gridlayout里面的Kivy boxlayout

时间:2016-10-29 19:02:45

标签: python kivy

我是编程新手,我在Kivy写了一个小应用程序。我被困了几天。我最初想要的是GridLayout中的几个按钮,其中按钮文本在Python中动态添加。我希望按钮上的文本按部分组织。

例如,按钮的最左边应该是房间号,中心应该是用户的名字,最右边应该是时间,而按钮底部我想要最多40个用户可以添加的字符消息。由于信息是动态添加的,我发现很难在单个按钮上进行,而不会干扰按钮上添加的其他信息的位置。此外,on_press上的任何按钮我都希望能够更改按钮的background_color。

所以,我的解决方案是通过首先创建一个带有画布的BoxLayout来分离按钮的不同部分,然后在不同的按钮上分别添加4个按钮,每个按钮文本分别为(房间号,名称,时间和用户消息)。我将按钮颜色的alpha值设置为0,使4个按钮看起来像一个按钮,并将其添加到GridLayout。我还需要能够动态更新画布的颜色,但不确定是否可能

我已经能够在.kv文件中执行此操作但不能在Python中执行此操作,所以这是我的问题:

  1. 有更简单的方法吗?
  2. 如何在Python中完成?
  3. 因为我需要在按下按钮时更改BoxLayout的画布颜色,K如何跟踪所有BoxLayout并更改其颜色。
  4. 以下是我编写的.kv文件的示例

    ScreenManagement:
        Screen:
            ScrollView:
                orientation: 'vertical'
                GridLayout:
                    spacing:10
                    id:grid
                    row_default_height:230
    
                    cols:1
                    size_hint_y:None
    
                    BoxLayout:
                        orientation: 'vertical'
    
                        canvas:
                            Color:
                                rgb:0,1,0
                            Rectangle:
                                pos:self.pos
                                size:self.size
                        Button:
                            background_color:0,1,0
    
                        Button:
                            text:
    
                            background_color:1,1,0
                            text_size: self.size
                            #halign: 'left'
    
                    BoxLayout: #this box has 4 btn that looks like 1btn  
                        orientation: 'vertical'
                        canvas:
                            Color:
                                rgb:0,1,0
                            Rectangle:
                                pos:self.pos
                                size:self.size
                        Button:
                            background_color:(0,1,0,.1)
                        Button:
                            background_color:(0,1,0,.1)
    
                        Button:
                            background_color:(0,1,0,.1)
    
                        Label:
                            background_color:(0,1,0,1)
    
                    BoxLayout:
                        canvas:
                            Color:
                                rgb:1,1,1,1
                            Rectangle:
                                pos:self.pos
                                size:self.size
                        Button:  
                            background_color:(0,1,0,1)
    
                        Button:
                            background_color:(1,0,0,1)
    

    这是Python代码没有做我想要的事情

    class ScreenManagement(ScreenManager):
        def box(self):
            layout=self.ids.grid #gridlayout in .kv file
            layout.bind(minimum_height=layout.setter('height')) 
            for i in range(10):
                btn1=Button(background_color=(0,1,0,1), text=str(i))           
                lbl=Button(background_color=(0,1,0,1),text='label')         
                btn=Button(background_color=(0,1,0,1),text='label')         
    
    
                b=BoxLayout(height=10,text='chien',background_color=(1,0,01),orientation='vertical',size_hint_y=None)         
                with b.canvas.before:
                    b.color=Color(btn1.background_color)
                    b.rect=Rectangle(pos=bpos, size=self.ids.grid.size,orientation='horizontal')
                b.add_widget(btn1)
                b.add_widget(lbl)
                b.add_widget(btn)
                self.ids.grid.add_widget(b) #grid is a gridlayout in .kv file
    
    Class testApp(App):
        def build(self):
            pass
    
    if __name__ == '__main__':
        testApp().run()
    

0 个答案:

没有答案