[英]How do i keep Label and Text input widget sizes the same inside a box layout in KIVY
I have an accordion layout and I am trying to figure out how to have varying numbers of widgets inside Box Layouts and keep them the same size as the other widgets in other Box Layouts.我有一个手风琴布局,我试图弄清楚如何在 Box Layouts 中拥有不同数量的小部件,并使它们与其他 Box Layouts 中的其他小部件保持相同的大小。
I want to avoid using a Float layout as it gets a bit more time consuming and would think there should be a method to accomplish this using box layouts and size hints etc.我想避免使用 Float 布局,因为它会花费更多时间,并且我认为应该有一种方法可以使用框布局和大小提示等来完成此操作。
Currently I have 6 Box Layouts with a Grid Layout inside each of them to position the widgets appropriately, however, in some of the grid layouts i would like less widgets than some others and this causes the widgets to fill the remaining space regardless of whether i put a size hint in or not.目前我有 6 个盒子布局,每个盒子内部都有一个网格布局,以适当地放置小部件,但是,在某些网格布局中,我想要的小部件比其他小部件少,这会导致小部件填充剩余空间,无论我是否是否输入尺寸提示。
I have tried adding Labels in the Grid Layouts with no content but it does not change the sizing arrangement.我试过在没有内容的网格布局中添加标签,但它不会改变尺寸排列。 If I add the extra Text Input widgets it adjust to suit and is the same as the other Box Layouts but is not what i want.如果我添加额外的文本输入小部件,它会调整以适应并且与其他框布局相同,但不是我想要的。
Here is an image of what the code looks like so far:这是到目前为止代码的样子的图像:
The top two box/Grid layouts with less widgets inside are the ones i want the same size as the other Box/Grid Layouts.我希望内部小部件较少的前两个框/网格布局与其他框/网格布局大小相同。
Any help on how to achieve this would be appreciated.任何有关如何实现这一目标的帮助将不胜感激。
Below is an extract of the.kv code: (I cut some out but apologies if it is too long)以下是 .kv 代码的摘录:(我删掉了一些,但如果太长,我深表歉意)
<CustButton@Button>:
font_size: 18
spacing: [10, 10]
size_hint: [.5, .8]
<CustLabel@Label>:
font_size: 18
pos_hint: [None, None]
color: 1, 0.757, 0.145, 1
size_hint: [.8,.8]
<CustLabel2@Label>:
font_size: 18
pos_hint: [None, None]
color: 1, 0.757, 0.145, 1
size_hint: [.8,.8]
<CustTextInput@TextInput>:
font_size: 18
write_tab: False
size_hint: [.5,.5]
AccordionItem:
title: "Water Figures"
GridLayout:
padding: [10,10]
rows: 3
cols: 0
BoxLayout:
orientation: 'horizontal'
padding: [10,10]
GridLayout:
rows: 4
cols: 2
padding: [10,10]
CustLabel:
text: "Port FW Tank Volume"
CustTextInput:
id: pfwtv
hint_text: "m3"
CustLabel:
text: "Stbd FW Tank Volume"
CustTextInput:
id: sfwtv
hint_text: "m3"
CustLabel:
text: "Fire Fight FW Tank Volume"
CustTextInput:
id: fffwtv
hint_text: "m3"
GridLayout:
rows: 4
cols: 2
padding: [10,10]
CustLabel:
text: "Port DW Tank Volume"
CustTextInput:
id: pdwtv
hint_text: "m3"
CustLabel:
text: "Stbd DW Tank Volume"
CustTextInput:
id: sdwtv
hint_text: "m3"
BoxLayout:
orientation: 'horizontal'
padding: [10,10]
GridLayout:
rows: 4
cols: 2
padding: [10,10]
CustLabel:
text: "Today #1 Evap Meter"
CustTextInput:
id: ter_1
hint_text: "m3"
CustLabel:
text: "Today #2 Evap Meter"
CustTextInput:
id: ter_2
hint_text: "m3"
CustLabel:
text: "Previous #1 Evap Meter"
CustTextInput:
id: per_1
hint_text: "m3"
CustLabel:
text: "Previous #2 Evap Meter"
CustTextInput:
id: per_2
hint_text: "m3"
GridLayout:
rows: 4
cols: 2
padding: [10,10]
CustLabel2:
text: "Today Total FW Volume"
CustTextInput:
id: ttfwv
hint_text: "m3"
CustLabel:
text: "Previous Total FW Volume"
CustTextInput:
id: ptfwv
hint_text: "m3"
CustLabel2:
text: "Today Total DW Volume"
CustTextInput:
id: ttdwv
hint_text: "m3"
CustLabel:
text: "Previous Total DW Volume"
CustTextInput:
id: ptdwv
hint_text: "m3"
BoxLayout:
padding: [10, 10]
orientation: 'horizontal'
GridLayout:
padding: [10,10]
rows: 4
cols: 2
CustLabel:
text: "No 1 Total Evap Output"
CustTextInput:
id: teout_1
hint_text: "m3"
CustLabel:
text: "No 2 Total Evap output"
CustTextInput:
id: teout_2
hint_text: "m3"
CustLabel:
text: "Date"
CustTextInput:
hint_text: root.dt1
font_size: 25
CustLabel:
text: "Top Left"
CustTextInput:
hint_text: root.dt2
font_size: 25
GridLayout:
rows: 4
cols: 2
padding: [10,10]
CustLabel:
text: "To be determined"
CustTextInput:
hint_text: "m3"
CustLabel:
text: "To be determined"
CustTextInput:
hint_text: "m3"
CustLabel:
text: "To be determined"
CustTextInput:
hint_text: "m3"
CustButton:
text: "Calculate"
CustTextInput:
hint_text: "m3"
One possibility is to use the row_force_default: True
property to force the height of the rows.一种可能性是使用row_force_default: True
属性来强制行的高度。 To specify the height you use the row_default_height
property and binds it with the size of the rows of one of your complete gridlayouts, for example, using one of its widgets.要指定高度,您可以使用row_default_height
属性并将其与完整网格布局之一的行大小绑定,例如,使用其小部件之一。
For example, using the ptdwv
height as a reference:例如,使用ptdwv
高度作为参考:
GridLayout:
row_force_default: True
row_default_height: ptdwv.height
rows: 4
cols: 2
padding: [10,10]
Reproducible example:可重现的例子:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.accordion import Accordion
kv_text = '''
<CustButton@Button>:
font_size: 18
spacing: [10, 10]
size_hint: [.5, .8]
<CustLabel@Label>:
font_size: 18
pos_hint: [None, None]
color: 1, 0.757, 0.145, 1
size_hint: [.8,.8]
<CustLabel2@Label>:
font_size: 18
pos_hint: [None, None]
color: 1, 0.757, 0.145, 1
size_hint: [.8,.8]
<CustTextInput@TextInput>:
font_size: 18
write_tab: False
size_hint: [.5,.5]
<MyAccordion>:
orientation: 'horizontal'
AccordionItem:
title: "Water Figures"
GridLayout:
padding: [10,10]
rows: 3
cols: 0
BoxLayout:
orientation: 'horizontal'
padding: [10,10]
GridLayout:
row_force_default: True
row_default_height: ptdwv.height
rows: 4
cols: 2
padding: [10,10]
CustLabel:
text: "Port FW Tank Volume"
CustTextInput:
id: pfwtv
hint_text: "m3"
CustLabel:
text: "Stbd FW Tank Volume"
CustTextInput:
id: sfwtv
hint_text: "m3"
CustLabel:
text: "Fire Fight FW Tank Volume"
CustTextInput:
id: fffwtv
hint_text: "m3"
GridLayout:
rows: 4
cols: 2
row_force_default: True
row_default_height: ptdwv.height
padding: [10,10]
CustLabel:
text: "Port DW Tank Volume"
CustTextInput:
id: pdwtv
hint_text: "m3"
CustLabel:
text: "Stbd DW Tank Volume"
CustTextInput:
id: sdwtv
hint_text: "m3"
BoxLayout:
orientation: 'horizontal'
padding: [10,10]
GridLayout:
rows: 4
cols: 2
padding: [10,10]
CustLabel:
text: "Today #1 Evap Meter"
CustTextInput:
id: ter_1
hint_text: "m3"
CustLabel:
text: "Today #2 Evap Meter"
CustTextInput:
id: ter_2
hint_text: "m3"
CustLabel:
text: "Previous #1 Evap Meter"
CustTextInput:
id: per_1
hint_text: "m3"
CustLabel:
text: "Previous #2 Evap Meter"
CustTextInput:
id: per_2
hint_text: "m3"
GridLayout:
rows: 4
cols: 2
padding: [10,10]
CustLabel2:
text: "Today Total FW Volume"
CustTextInput:
id: ttfwv
hint_text: "m3"
CustLabel:
text: "Previous Total FW Volume"
CustTextInput:
id: ptfwv
hint_text: "m3"
CustLabel2:
text: "Today Total DW Volume"
CustTextInput:
id: ttdwv
hint_text: "m3"
CustLabel:
text: "Previous Total DW Volume"
CustTextInput:
id: ptdwv
hint_text: "m3"
BoxLayout:
padding: [10, 10]
orientation: 'horizontal'
GridLayout:
padding: [10,10]
rows: 4
cols: 2
CustLabel:
text: "No 1 Total Evap Output"
CustTextInput:
id: teout_1
hint_text: "m3"
CustLabel:
text: "No 2 Total Evap output"
CustTextInput:
id: teout_2
hint_text: "m3"
CustLabel:
text: "Date"
CustTextInput:
hint_text: '11/07/2017'#root.dt1
font_size: 25
CustLabel:
text: "Top Left"
CustTextInput:
hint_text: '20:00'#root.dt2
font_size: 25
GridLayout:
rows: 4
cols: 2
padding: [10,10]
CustLabel:
text: "To be determined"
CustTextInput:
hint_text: "m3"
CustLabel:
text: "To be determined"
CustTextInput:
hint_text: "m3"
CustLabel:
text: "To be determined"
CustTextInput:
hint_text: "m3"
CustButton:
text: "Calculate"
CustTextInput:
hint_text: "m3"
'''
class MyAccordion(Accordion):
pass
class MyApp(App):
def build(self):
return MyAccordion()
def main():
Builder.load_string(kv_text)
app = MyApp()
app.run()
if __name__ == '__main__':
main()
Output:输出:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.