【问题标题】:How to display items of a list on separate lines in Kivy?如何在 Kivy 中的不同行上显示列表项?
【发布时间】:2020-06-24 06:42:58
【问题描述】:

我正在使用 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" 有多个键,每个键都有一个值,该值是一个包含单词的单个或多个定义的列表。如果一个词有多个含义,则返回一个列表,我想在不同的行上返回每个含义(列表的项目)。但是如果使用 for 循环,它只返回第一个含义(列表的项目)并中断,因此不返回第二个或更多输出。我该如何克服这个问题?请提出解决方案。

以下是 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"

【问题讨论】:

    标签: python-3.x for-loop formatting kivy newline


    【解决方案1】:

    define() 方法中的循环:

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

    实际上并不循环,而是在data 的第一个条目上返回。 尝试类似:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多