布局放置问题

惠拉根

我正在像在kivy中编码CMQ应用程序。我的布局显示出现问题:一些多行按钮没有出现。我希望每一行都适合内容。

这是我的第一篇文章,所以请随时说问问题的方式是否错误。

我尝试使用具有许多.bind(minimum_height)等的Grid,Box,StackLayouts。

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.core.window import Window

questions = []
questions.append({'question' : 'Lorem ipsum dolor Lorem ipsum dolor sit amet sit amet',
            'items':['Lorem', 'ipsum dolor nec sapien sit amet libero ', 'sit amet']})
questions.append({'question' : 'Curabitursit amet libero nec sapien nec  .',
            'items':['Lorem', 'ipsum dolor sapien nec libero',
            'sit amet libero egestas dictum eu eget neque']})
questions.append({'question' : 'Curabitur nec sapien nec  .',
            'items':['Lorem', 'ipsum dolor sapien nec libero',
            'sit amet libero egestas dictum eu eget neque']})


class MultiLineLabel(Button):
    def __init__(self, **kwargs):
        super(MultiLineLabel, self).__init__(**kwargs)
        self.text_size = self.size
        self.bind(size=self.on_size)
        self.bind(text=self.on_text_changed)
        self.size_hint_y = None  # Not needed here
        self.padding_y = 7
        self.halign = 'center'
        self.valign = 'middle'
        # self.give_height = self.texture_size[1]
        # print('init', self.give_height)

    def on_size(self, widget, size):
        self.text_size = size[0], None
        self.texture_update()
        # self.give_height = self.texture_size[1]
        # print('dans l\'ombjet', self.texture_size[1])
        if self.size_hint_y == None and self.size_hint_x != None:
            self.height = max(self.texture_size[1], self.line_height)
        elif self.size_hint_x == None and self.size_hint_y != None:
            self.width = self.texture_size[0]

    def on_text_changed(self, widget, text):
        self.on_size(self, self.size)

class QuestionApplication(GridLayout):

    def __init__(self, *args):
        super(QuestionApplication, self).__init__(*args)
        self.size_hint_y = None
        self.cols = 2
        self.spacing =10
        for ask in questions:
            label = Label(text=ask['question'],halign='center',
                      valign='top', size_hint=(0.6, None),
                      text_size=(self.width, None))
            label.bind(size=label.setter('text_size'))
            self.add_widget(label)
            vbox = GridLayout(size_hint_y=None, cols=1,
                              size_hint_x=0.4)
            for item in ask['items']:
                button = MultiLineLabel(text=item)
                vbox.add_widget(button)
            self.add_widget(vbox)
        self.bind(minimum_height=self.setter('height'))

class ExamApp(App):

    def build(self):
        return QuestionApplication()


if __name__ == '__main__':
    Window.size = (500, 400)
    ExamApp().run()
约翰·安德森

您正在考虑QuestionApplication带孩子的人数:

self.bind(minimum_height=self.setter('height'))

vbox大小不能说明其子项的变化。

在您的QuestionApplication __init__()方法中,您需要添加

vbox.bind(minimum_height = vbox.setter('height'))

创建完之后vbox

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章