将字符串分割为不同标签

0 投票
2 回答
1360 浏览
提问于 2025-04-17 21:02

我正在尝试把一个字符串分割成单词,然后把每个单词放到不同的标签上。
我在这里找到了一段代码,可以分割并打印出每个单词:

my_phrase="The split method returns a list of the words in the string"
my_split_words = my_phrase.split() 
for each_word in my_split_words:
   print each_word

但是我想知道怎么用循环来生成标签,而不是打印出来?

我正在使用Python 2.7和Kivy来做图形界面。提前谢谢大家!

抱歉如果我的格式不对,这是我第一次发帖 :)

编辑 1:

我现在的代码看起来是这样的:

from kivy.app import App

from kivy.uix.scatter import Scatter
from kivy.uix.label import Label
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout

class TestApp(App):
    def build(self):
        b = BoxLayout(orientation='vertical')
        f = FloatLayout()
        s = Scatter()
        l = [Label(text=word) for word in "The split method returns a list of the words in the string".split()]

        f.add_widget(s)
        s.add_widget(l)
        b.add_widget(f)
        return b

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

在@Hugh Bothwell的回答之后,我试着把旧的L标签替换成分割后生成的多个标签,但没有成功 :T

编辑2:
现在我的代码运行得很好,谢谢大家。
它从用户那里获取输入,然后把字符串分割成散布的标签。
虽然有点乱,但能完成任务!

class TestApp(App):
    def build(self):
        ti = TextInput(font_size=30,
                      size_hint_y=None,
                      height=50,
                      text='default')
        b = BoxLayout(orientation='vertical')
        f = FloatLayout()

        def SplitIntoLabels(*args):
            f.clear_widgets()
            for word in new_list:
                s = Scatter(size_hint_x=None, size_hint_y=None, do_rotation=False)
                l = Label(text=word, font_size=50)
                s.add_widget(l)
                f.add_widget(s)
                s.size=l.size

        ti.bind(text=SplitIntoLabels)

        b.add_widget(ti)
        b.add_widget(f)

        return b

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

2 个回答

2
from kivy.uix.label import Label

my_phrase = "The split method returns a list of the words in the string"

labels = [Label(text=word) for word in my_phrase.split()]
for lab in labels:
    s.add_widget(lab)
for word in my_phrase.split():
    s.add_widget(Label(text=word))

编辑:

或者,更直接地说,

2

你运行了 s.add_widget(l),但是 l 其实不是一个小部件,而是一个列表……所以这样做显然是行不通的。

你应该尝试做类似这样的事情:

for widget in l:
    s.add_widget(widget)

另外,当你说“但是它没有工作”时,通常最好能说明一下 具体是怎么没有工作的,最好能附上错误信息。在这种情况下,你可能会遇到一个 WidgetException,里面会有一些关于问题的描述,这样可以帮助你找到问题所在。或者,也许还有其他错误,如果有更多信息的话,我可能就不会错过了。

撰写回答