我正在创建一个Accordion小部件,点击输入文本输入。
以下是python代码:
class LabelNavigatorWidget(BoxLayout):
def create_accordion_widget(self):
self.cleanup_root()
root = Accordion(id='accordion_widget', orientation='vertical')
for x in range(2):
item = AccordionItem(title='Title %d' % x)
item.add_widget(Label(text='Very big content\n' * 10))
root.add_widget(item)
self.add_widget(root)
return root
def cleanup_root(self):
# Remove previous widget
for child in self.children:
if child.id == 'accordion_widget':
self.remove_widget(child)
class LabelNavigatorApp(App):
def build(self):
return LabelNavigatorWidget()
if __name__ == "__main__":
LabelNavigatorApp().run()
以下是kv代码:
<LabelNavigatorWidget>:
BoxLayout:
orientation: 'vertical'
TextInput:
id: label_input
font_size: 30
pos: 0, 0
size_hint_y: None
height: 50
multiline: False
text: ''
on_text_validate: root.create_accordion_widget(); self.text = ''
它的外观如下:
答案 0 :(得分:2)
因此,默认的BoxLayout是水平的,如何将其设置为垂直?
与其他BoxLayout一样,只需设置orientation: 'vertical'
。
<LabelNavigatorWidget>:
orientation: 'vertical'
BoxLayout:
orientation: 'vertical'
文本输入的初始位置位于BoxLayout的底部,如何让它位于顶部?
添加一个空小部件以填充剩余空间。
BoxLayout:
orientation: 'vertical'
TextInput:
size_hint_y: None
height: 50
# ... and the rest
Widget:
无论什么时候,我点击Enter,它都会创建一个新的手风琴小部件 - 这就是为什么我在创建一个新小部件之前删除之前的小部件。但是,是否有更好的方法来获取子窗口小部件(比如id?)然后将其删除而不是遍历所有子项?
您可以将对它的引用存储为属性,例如self.accordion_widget = AccordionWidget(...)
然后self.remove_widget(self.accordion_widget)
。