Kivy布局问题

时间:2019-01-13 16:25:35

标签: kivy kivy-language

我正在尝试使用Kivy创建GUI。但是,我无法解决某些格式问题。 这是我的KV文件的精简版:

BoxLayout:
    MainCanvas:
        size_hint: 1,1
        size: (root.width,root.height*.9)
        DoubleEllipseWidget:
        ActionBar:
            id: _action
            size_hint: 1,0.1
            size: (root.width,root.height*.1)
            pos_hint: {'bottom':1}
            ActionView:
                use_separator: True
                ActionPrevious:
                    title: 'Test App:'
                    with_previous: False
                ActionOverflow:
                    disabled: True
                ActionButton:
                    important: True
                    text: 'Button 1'
                    #on_release: some_function
                ActionButton:
                    text: 'Button 2'
                    #on_release: some_function
                ActionButton:
                    text: 'Button 3'
                    #on_release: some_function


<DoubleEllipseWidget>
    size: [200, 200]
    canvas:
        Color:
            rgba: 0, 0, 0, 1
        Ellipse
            size: [198, 198]
            pos: [600-200-100, 800-200-100]
        Color:
            rgba: 1, 1, 1, 1
        Ellipse
            size: [200, 200]
            pos: [600-200-100, 800-200-100]
    TextInput:
        on_parent:self.focus = True
        text: 'center of circle'
        background_color: (0,0,0,0)
        foreground_color: (0,0,0,1)

我要达到的目标很容易解释。

基本上,应该有一个菜单栏沿着屏幕窗口水平运行(总高度的10%和宽度的100%)。我相信我已经做到了。

剩下的95%的高度应该是主画布-我相信我也已经做到了。

最后一部分是将一个特定的小部件放置在主画布的中央。这是我遇到的麻烦,希望能有所帮助。

我需要居中的小部件由两个圆组成(一个圆位于另一个圆的顶部,一个圆稍小于另一个圆)。然后,在最上方的圆圈顶部应该是TextInput。

1 个答案:

答案 0 :(得分:0)

在听取了这个社区的建议之后,我剥离了所有逻辑,直到只剩下基础知识(类定义和布局),并且仍然遇到问题。

但是,我现在知道我认为可能不是布局问题。 Kivy错误报告最近于2018年11月被评论(TextInput焦点问题#3863),表明存在无法解释的实例,其中textinput可能失去焦点。以下是建议的解决方法,它也对我有用。感谢那些试图帮助我的人。

    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.uix.popup import Popup
    from kivy.uix.textinput import TextInput
    from kivy.lang import Builder

    Builder.load_string('''
    <Base>:
    Button:
        text: 'Press for Popup'
        on_press: root.edit_text()

    <TextInputX>
    id: texter
    keyboard_mode: 'managed'
    is_focusable: True
    focus: True
    keyboard_on_key_down:
        texter.show_keyboard()
''')


class Base(BoxLayout):
    def __init__(self, **kwargs):
        super(Base, self).__init__(**kwargs)

    def edit_text(self, *args):
        self.clear_widgets()
        content = TextInputX()
        # content.focus = True
        popup = Popup(content=content)
        popup.open()


class TextInputX(TextInput):
    def __init__(self, **kwargs):
        super(TextInputX, self).__init__(**kwargs)
        # self.focus = True


class SampleApp(App):
    def build(self):
        return Base()


if __name__ == '__main__':
    SampleApp().run()