如何在kivy python中添加标签,TextInput

Posted

技术标签:

【中文标题】如何在kivy python中添加标签,TextInput【英文标题】:how to add label, TextInput in kivy python 【发布时间】:2017-12-19 12:01:39 【问题描述】:

我是 python 的初学者,尤其是 kivy。我在设计 GUI 时遇到了一些小问题。根据页面中的图表(我已附上),我无法以正确的格式放置标签 TextInput。你能帮助我吗?提前致谢。

from kivy.app import App
from kivy.uix.tabbedpanel import TabbedPanel, TabbedPanelItem
from kivy.lang import Builder
from kivy.uix.checkbox import CheckBox
from kivy.uix.accordion import Accordion, AccordionItem
from kivy.uix.button import Button
from kivy.app import App
from kivy.uix.textinput import TextInput

Builder.load_string("""

<Test>:
    do_default_tab: False

    TabbedPanelItem:
        text: 'page1'
        BoxLayout:
            Label:
                text: 'label'
            Label:
                text: 'entry'       
            TextInput:
                text: 'Entry'
            TextInput:
                text: 'Entry'
            CheckBox: 
                text: 'CheckBox'
            Button:
                text: 'button'


    TabbedPanelItem:
        text: 'page2'
        BoxLayout:
            Label:
                text: 'label'
            TextInput:
                text: 'entry'
            Label:
                text: 'label'
            TextInput:
                text: 'entry'
            Button:
                text: 'button'

""")

class Test(TabbedPanel):
    pass

class MyApp(App):

    def build(self):
        test = Test()
        panel = TabbedPanelItem()
        test.add_widget(panel)
        return test

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

【问题讨论】:

尝试使用 GridLayouts 而不是 BoxLayout。提示:对于有 5 个子小部件的第 2 页,添加一个空的第 6 个小部件以帮助调整间距。 亲爱的@Mox,你能解决这个问题吗?我试了很多次,还是不行。 【参考方案1】:

您将小部件(标签、文本输入、复选框、按钮...)放在 BoxLayout 中,BoxLayout 的行为是将小部件分组到(仅一个)列或行中,您可以更改 BoxLayout 的方向设置 attr 'orientation',默认为 'horizo​​ntal'。 (read this)

您可以将一个 BoxLayout 放入另一个 BoxLayout,并设置方向您可以创建不同的东西,对于您 page1 您可以执行以下操作:

BoxLayout:
    orientation: 'vertical'
    BoxLayout:
        orientation: 'horizontal'
        Label:
            text: 'label'
        TextInput:
            text: 'Entry'
        CheckBox: 
            text: 'CheckBox'
        Button:
            text: 'button'
    BoxLayout:
        orientation: 'horizontal'
        Label:
            text: 'label'
        TextInput:
            text: 'Entry'
        CheckBox: 
            text: 'CheckBox'
        Button:
            text: 'button'

就像 Mox 在 cmets 中所说,GridLayout 可能适用于您的应用。

如果您是 kivy 的初学者,我建议您观看来自 kivy 核心开发人员之一 Alexander Taylor 的this videos。

【讨论】:

亲爱的,@favcau 它不起作用。它显示错误“TypeError: 'NoneType' object has no attribute 'getitem'”。你能检查一下你给出的完整代码吗?我试过 GridLayout ,但同样的错误来了。谢谢。 嗨@crazyDelight,我的代码是一个例子,只是一个kv语言。你需要在你的代码中添加我的例子,做一些like this。我的例子没有报错,可能是你贴错地方了,我需要看你的代码解决你遇到的错误,自己调试试试。

以上是关于如何在kivy python中添加标签,TextInput的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Kivy、Python 中更新标签的文本

Kivy - 如何在标签中添加多个标签或按钮

我正在尝试使用 python 文件在 kivy 中添加标签。但它每次都抛出错误

Python:如何在 kivy 中使标签加粗

如何在 python 中使用格式化创建自定义 Kivy 标签类?

如何在 kivy python 中使用 size_hint 制作标签