我有一个代码,按一下按钮应该创建一个列表,并将其放在窗口内的小部件列表中,但无论我选择哪种布局以及如何创建它们(指定位置或不指定位置),它们总是创建得很好,但都堆叠在屏幕底部
自定义kv小工具:
<item_widget@FloatLayout>
Screen:
size_hint:1,None
height:25
id:item_space
color:18/256,47/256,82/256,0.4
canvas.before:
Color:
rgba: self.color
Rectangle:
pos: self.pos
size: self.size
Label:
id:description
markup:True
on_ref_press:root.open_hyperlink(args[1])
text_size : self.size
shorten:True
shorten_from:'right'
padding_x:4
size_hint:None,1
width:item_space.width-92
pos:self.x,self.y
valign:'center'
Label:
id:diameter
text_size : self.size
width:25
halign:'center'
size_hint:None,1
pos:item_space.width-88,self.y
valign:'center'
Label:
id:pitch
text_size : self.size
width:25
halign:'center'
size_hint:None,1
pos:item_space.width-59,self.y
valign:'center'
Label:
id:price_value
text_size : self.size
width:30
halign:'center'
size_hint:None,1
pos:item_space.width-30,self.y
valign:'center'
此函数触发创建列表中的所有小部件:
def put_items_inscroll(self,item_list):
i=0
self.ids.menu_list_scroll.clear_widgets()
for dict in item_list:
self.ids.menu_list_scroll.add_widget(self.constr_widget(dict))
i+=1
constr_widget定义:
def constr_widget(self,item,y=0):
row_instance=item_widget()
row_instance.ids.description.text='[ref='+item['link']+']'+str(item['description'])+'[/ref]'
row_instance.ids.diameter.text=str(item['diameter'])
row_instance.ids.pitch.text=str(item['pitch'])
row_instance.ids.price_value.text=str(item['calc_valPerProp'])
row_instance.size_hint = (1, None)
row_instance.height=25
return row_instance
我真的坚持了这一点,什么也没做,如果我只放了一个小部件,它可以放在顶部,但如果我开始把它们都放在底部,它们就会堆叠在一起
屏幕定义:
ScrollView:
id:menu_list_scroll_window
bar_width: 10
effect_cls: "ScrollEffect"
scroll_type: ['bars']
size_hint: (None, None)
size: (right_side.width, right_side.height-50)
StackLayout:
id: menu_list_scroll
spacing: 5
size_hint_y: None
width: right_side.width
height: self.minimum_height
orientation: 'rl-tb'
小部件是如何堆叠的:
发布于 2018-06-16 03:47:01
您需要将布局放在屏幕内部。
如下例所示:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
KV = """
ScreenManager:
Screen:
name: 'first'
BoxLayout:
Label:
text: "Test label screen1"
Button:
text:'go to other'
on_press: root.current = 'other'
Screen:
name: 'other'
on_enter: mybox.add_labels()
BoxLayout:
orientation: "vertical"
MyBox:
id: mybox
Button:
size_hint: 1, 0.2
text:'go to first'
on_press: root.current = 'first'
"""
class MyBox(BoxLayout):
def add_labels(self):
self.clear_widgets()
for i in range(10):
self.add_widget(Button(text=str(i)))
class MyApp(App):
def build(self):
return Builder.load_string(KV)
MyApp().run()
https://stackoverflow.com/questions/50878126
复制相似问题