为什么应用程序不更新textinput

时间:2017-03-06 18:55:15

标签: python kivy

我正在创建一个应用程序,以特定格式重命名来自扫描仪的文件。 我们的想法是扫描目录并加载文件列表,这些文件根据textinput框中的文本重命名。我已经删除了应用程序以直接解决问题

import csv, os, datetime, string, shutil
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager, FadeTransition

from kivy.properties import ObjectProperty, ListProperty, StringProperty, DictProperty

from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from functools import partial
from kivy.uix.scrollview import ScrollView

class TestScreen(Screen):
    def update_text(self, text):
        print(text)

class ScreenManagement(ScreenManager):
    pass

class TestApp(App):
    default_font_size = 15

    def build(self):
        compiled_kv_file = Builder.load_file("TestApp.kv")
        return compiled_kv_file

if __name__ == "__main__":
    print("Main loop")
    TestApp().run()

并且kv文件是

#: import FadeTransition kivy.uix.screenmanager.FadeTransition

ScreenManagement:
transition:FadeTransition()
TestScreen:

<TestScreen>:
    name: "TestScreen"
    Button:
        text:"Test Screen"
        size_hint: 0.2,0.1
        pos_hint: {"x":0.2,"y":0.8}
        font_size: 20
    TextInput:
        id: my_textinputa
        text:"File Screen"
        size_hint: 0.2,0.1
        pos_hint: {"x":0.4,"y":0.8}
        font_size: 20
        on_text:
            root.update_text(self.text)
    Label:
        size_hint: 1,0.5
        pos_hint: {"x":0,"y":0}
        text: my_textinputa.text
        font_size: 20

我使用Windows 10和eclipse与pydev,如果那是相关的。 textinput将输入的文本返回到.py文件。但textinput不会更新输入的文本。此外,似乎有两个标签而不是一个。

我的直觉说我在某种程度上相互添加了两组小部件。由于只更改了最上面的一个,因此底部的文本不会改变。控制台中的输出是正确的。然而,textinput框并没有自我更新。

有人可以建议如何正确更新textinput吗?

1 个答案:

答案 0 :(得分:0)

定义根小部件的多个.kv文件可能会产生此问题。一种解决方案是放弃Builder.load_file("TestApp.kv")

class TestApp(App):
    default_font_size = 15

    def build(self):
        pass

并将.kv文件重命名为App实例的名称(在本例中为test.kv)。这样,kivy只会加载一个.kv文件作为根小部件。