如何在 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)
我正在使用 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)