【发布时间】:2019-07-13 22:03:23
【问题描述】:
我正在尝试将自定义小部件添加到 GridLayout,但大小和位置不会动态缩放以适应父布局。我的目标是通过按下按钮将这些 CustomWidgets 之一添加到 GridLayout。如果我将 .kv 文件的 <CustomWidgets> 类的内容直接复制并粘贴到 .kv GridLayout(左图)中,我能够实现我想要的结果,但这回避了按钮的目的。
我已经链接了一张图片,以帮助阐明我的预期结果与实际结果。左图显示了我想要的按三下“添加活动”按钮的结果。右图显示了当我尝试通过按三次“添加活动”按钮添加自定义小部件时的实际结果。
我的猜测是,如果在将 'size_hint_x: self.x' 添加到 GridLayout 后设置它,则可以解决此问题。我试图通过在构建后设置 CustomWidget 'size_hint_x' 来适应 .kv GridLayout 中的父布局
CustomWidgets:
size_hint_x: self.x
没有运气。我可以将一个数值设置为 CustomWidget 的宽度,但它不会动态更改以适应窗口的大小。
DemoApp.py
class CustomGridLayout(GridLayout):
def add_list_item(self):
print("add list item - CustomGridLayout")
self.ids['list_layout'].add_widget(CustomWidgets())
pass
class CustomWidgets(Widget):
pass
class DemoApp(App):
def build(self):
underlying_layout = CustomGridLayout()
return underlying_layout
if __name__ == "__main__":
DemoApp().run()
demo.kv
<CustomGridLayout>:
id: underlying_layout
orientation: 'vertical'
cols: 1
row: 2
ScrollView:
GridLayout: #<- This is the GridLayout I want to add custom widgets to
id: list_layout
cols: 1
height: self.minimum_height
row_default_height: 60
size_hint_y: None
Label:
height: 20
text: 'List:'
AnchorLayout:
size_hint_y: .4
Button:
text: 'Add List Item'
on_press: root.add_list_item()
<CustomWidgets>
StackLayout:
cols: 3
rows: 1
orientation: 'lr-tb'
#size_hint: self.x , None #<-- Is there a size_hint I can provide that will adjust size once widget is added?
height: 80
Button:
size_hint: .25, None
TextInput:
size_hint: .5, None
Button:
size_hint: .25, None
【问题讨论】:
-
size_hint是父母大小的一小部分,所以它应该是一个从 0 到 1 的数字。