如何在 Kivy 的不同行中显示列表项?

How to display items of a list on separate lines in Kivy?

我正在使用 Python 3 和 kivy 编写一个简单的字典程序。

class MainScreen(Screen):

    def define(self, w):
        with open('data.json') as dict_file:
            data = json.load(dict_file)
        for number, meaning in enumerate(data[w]):
            return str(number + 1) + ') ' + meaning

    def show_meaning(self, w):
        with open('data.json') as dict_file:
            data = json.load(dict_file)
        w = w.casefold()
        if w in data.keys():
            self.ids.meaning.text = f"{self.define(w)}"
            print("Meaning printed")
        elif len(get_close_matches(w, data.keys(), cutoff=0.8)) > 0:
            d = enumerate(get_close_matches(w, data.keys(), cutoff=0.7))
            self.ids.meaning.text = f"Did you mean this/any of these?\n{[(number + 1, name) for number, name in d]}"
            time.sleep(3)
        elif w == '' or w == ' ' or w == '  ' or w == '   ' or w == '    ' or w == '     ' or w == '      ':
            self.ids.meaning.text = "Please enter something"
        else:
            self.ids.meaning.text = "Double check the word or try another word."

这是程序的主要部分。字典 "data" 有多个键,每个键都有一个值,该值是一个包含单词的单个或多个定义的列表。如果一个词有多个含义,则 return 编辑一个列表,我想 return 每个含义(列表的项目)在不同的行 。但是,如果使用 for 循环,它 return 只是第一个含义(列表的项目)并中断,因此不会 return 第二个或更多输出。我怎样才能克服这个问题?请提出解决方案。

以下是 Kivy 代码:

<MainScreen>:
    GridLayout:
        cols: 1
        Label:
            text: "Dictionary"
            font_size: "40sp"
        TextInput:
            id: word
            hint_text: "Enter a word to know its meaning"
        ScrollView:
            Label:
                id: meaning
                text: ""
                text_size: self.width, None
                size_hint_y: None
                height: self.texture_size[1]
        Button:
            text: "Enter"
            on_press: root.show_meaning(root.ids.word.text)
            size_hint: 0.2, 0.5
            pos_hint: {'center_x': 1.5, 'center_y': 0.6}

<RootWidget>:
    MainScreen:
        name: "main_screen"

您在 define() 方法中的循环:

    for number, meaning in enumerate(data[w]):
        return str(number + 1) + ') ' + meaning

实际上并没有循环,而是 returns 在您的 data 中的第一个条目上。 尝试类似的东西:

    defs = []
    for number, meaning in enumerate(data[w]):
        defs.append(str(number + 1) + ') ' + meaning + '\n')
    return ''.join(defs)