我是编程新手,我在Kivy写了一个小应用程序。我被困了几天。我最初想要的是GridLayout中的几个按钮,其中按钮文本在Python中动态添加。我希望按钮上的文本按部分组织。
例如,按钮的最左边应该是房间号,中心应该是用户的名字,最右边应该是时间,而按钮底部我想要最多40个用户可以添加的字符消息。由于信息是动态添加的,我发现很难在单个按钮上进行,而不会干扰按钮上添加的其他信息的位置。此外,on_press上的任何按钮我都希望能够更改按钮的background_color。
所以,我的解决方案是通过首先创建一个带有画布的BoxLayout来分离按钮的不同部分,然后在不同的按钮上分别添加4个按钮,每个按钮文本分别为(房间号,名称,时间和用户消息)。我将按钮颜色的alpha值设置为0,使4个按钮看起来像一个按钮,并将其添加到GridLayout。我还需要能够动态更新画布的颜色,但不确定是否可能
我已经能够在.kv文件中执行此操作但不能在Python中执行此操作,所以这是我的问题:
以下是我编写的.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()