如何更改来自同一TextInput字段的不同标签上的文本?

时间:2019-07-06 14:15:45

标签: python kivy kivy-language

在我的程序中,我有一个添加新框的按钮。当您在此新框中按下按钮时,它会添加一个新框,依此类推。在每个框中,我都有一个标签,并且希望能够从相同的textinput字段中更改此文本。但是我不想在每个框中都输入相同的文本,因此我想选择该框,编写该文本,然后按一个按钮,以便将文本从输入字段传递到该特定的框/标签。我已经从我的应用程序中删除了所有其他内容,因此我将向您展示完整的代码,以便您可以尝试使用该程序来理解我的意思。

我尝试使用主窗口小部件上的按钮,但是后来我不知道如何选择应该更新的框。我也尝试过使用框中的按钮(在代码中称为“ R”),但随后我只得到一个错误。

如果我使用注释掉的代码,则会出现此错误:

"AttributeError: 'super' object has no attribute '__getattr__'"

我将非常感谢您的帮助!非常感谢。

这是python文件:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout


class Home(FloatLayout):

    def first(self, *args):
        a = box()
        self.ids.frame.add_widget(a)
        b = a.ids.btn3
        b.bind(on_press=self.second)
        c = a.ids.btn1
        c.bind(on_press=self.textedit)

    def second(self, *args):
        d = box()
        e = d.ids.mains
        e.pos_hint={"right": .5, "top": .7}
        self.ids.frame.add_widget(d)
        f = d.ids.btn3
        f.bind(on_press=self.third)
        g = d.ids.btn1
        g.bind(on_press=self.textedit)

    def third(self, *args):
        h = box()
        i = h.ids.mains
        i.pos_hint = {"right": .3, "top": .9}
        self.ids.frame.add_widget(h)
        j = h.ids.btn1
        j.bind(on_press=self.textedit)

    def textedit(self, *args):
        print("Hello")
       #k = self.ids.tinput.text
       #l = self.ids.lab
       #l.text = k

    def textedit2(self, *args):
        print("hei")
       #This is the submitbutton on the main widget

class HiApp(App):
    def build(self):
        return Home()

class box(FloatLayout):
    pass

if __name__ == "__main__":
    HiApp().run()

这是.kv文件

<Home>:
    FloatLayout:
        id: frame
        size_hint_y: 1
        pos_hint:{"right":1,"top":1}
        canvas.before:
            Color:
                rgba: (1, 1, 1, 1)
            Rectangle:
                size: self.size
                pos: self.pos

    BoxLayout:
        id: boks
        orientation: "vertical"
        size_hint_x: .20
        size_hint_y: .15
        pos_hint:{"right":1,"top":1}
        canvas.before:
            Color:
                rgba: (0, 1, 0, 1)
            Rectangle:
                size: self.size
                pos: self.pos
        TextInput:
            id: tinput
            hint_text: "Frome here"

        Button:
            id: t_sub
            text: "Submit"
            on_press: root.textedit2()

    Button:
        id: start
        text: "Start"
        font_size: 20
        color: 0, 0, 0, 1
        background_normal: ''
        background_color: .88, .88, .88, 1
        size_hint: .1, .1
        pos_hint:{"right":.5,"top":.35}
        on_press: root.first()

<box>:

    BoxLayout:
        id: mains
        orientation: "vertical"
        size_hint_x: .18
        size_hint_y: .13
        pos_hint:{"right":.3,"top":.5}
        canvas.before:
            Color:
                rgba: (.20, .05, .0, 1)
            Rectangle:
                size: self.size
                pos: self.pos

        BoxLayout:
            id: c1
            size_hint_y: .25
            pos_hint:{"left":.1,"top":.5}

            GridLayout:
                rows: 1
                cols: 3
                padding: 4
                spacing: 4

                Button:
                    id: btn1
                    text: "R"
                    font_size: 30
                    color: 0, 0, 0, 1
                    background_normal: ''
                    background_color: .88, .88, .88, 1
                    size_hint: .3, .3
                    pos_hint:{"left":.5,"top":.5}
                    on_press:

                Button:
                    id: btn2
                    text: "-"
                    font_size: 30
                    color: 1, 0, 0, 1
                    background_normal: ''
                    background_color: .88, .88, .88, 1
                    size_hint: .3, .3
                    pos_hint:{"left":.5,"top":.5}
                    on_press:

                Button:
                    id: btn3
                    text: "+"
                    font_size: 30
                    color: 0, 1, 0, 1
                    background_normal: ''
                    background_color: .88, .88, .88, 1
                    size_hint: .3, .3
                    pos_hint:{"left":.5,"top":.5}
                    on_press:

        GridLayout:
            rows: 1
            cols: 2
            padding: 4
            spacing: 4

            Label:
                id: lab
                text: "Text here"

            TextInput:
                hint_text: "0"

1 个答案:

答案 0 :(得分:0)

问题

  

我想用id: tinput在输入字段中写文本   (左上角),然后按按钮(R),使文本   从输入字段转到标签。

解决方案

解决方案是在kv文件中使用以下关键字:

  1. app-始终引用您的应用程序实例
  2. root-引用当前规则中的基本窗口小部件/模板

摘要-kv文件

            Button:
                id: btn1
                text: "R"
                font_size: 30
                color: 0, 0, 0, 1
                background_normal: ''
                background_color: .88, .88, .88, 1
                size_hint: .3, .3
                pos_hint:{"left":.5,"top":.5}
                on_press:
                    lab.text = app.root.ids.tinput.text

输出

Entered text Box's Label's text changed