因此,作为游戏的一部分,我会弹出一个动画文本窗口,每秒打印一个单词。
这里的问题是方法“eachwordprint”,在游戏中反复调用,但我只想运行newmessage.text.split一次。我只是把它放在init中,但在游戏中,我在不同时间更改字符串,所以每次更改字符串时都需要拆分字符串。
我试过
if self.counter <=1:
words = newmessage.text.split(' ')
但这不起作用(我不确定为什么)。关于如何更好地实现我想要做的事情的任何建议?
class NewLabel(ButtonBehavior, Label):
def __init__(self, **kwargs):
super(NewLabel, self).__init__(**kwargs)
self.font_name='PressStart2P.ttf'
self.font_size=16
self.text=kwargs['text']
self.text_size=(Window.width*.70, Window.height*.23)
self.mipmp = True
self.line_height=1.5
self.markup = True
self.counter=0
#self.words = self.text.split(' ')
def eachwordprint(self, *args):
self.counter += 1
if self.counter <=1:
words = newmessage.text.split(' ')
print "counter: ", self.counter
print "word length", len(words)
if self.counter <= 1:
anim = Animation(size_hint=(1, .25), duration=1.8)
anim.start(messagebox)
self.text=''
if len(words) > self.counter:
self.text += words[self.counter]
self.text += " "
else:
anim2 = Animation(size_hint=(1, 0), duration=1.8)
anim2.start(messagebox)
#messagebox.remove_widget(self)
return False
newmessage = "this is a test hello. this is a test."
答案 0 :(得分:0)
你可以记住分裂
的输出MC = {}
def wrapper(fn):
def inner(arg):
if not MC.has_key(arg):
MC[arg] = fn(arg)
return MC[arg]
return inner
@wrapper
def myfn(x):
print x
myfn(1)
myfn(1)
myfn(2)
所以基本上你正在编写像这样的文本分割函数
@wrapper
def split(text):
return text.split(' ')
每次你想要分割newmessage.text时,你都称它为split(newmessage.text)。包装器将首先检查是否已经遇到文本并返回值(如果是)或调用该函数并将其拆分并存储以供以后使用。
运行上述代码答案 1 :(得分:0)
如果您的newmessage
被代码的其他部分修改为不需要了解NewLabel
实例,我可能会创建一个类来封装{ {1}}行为:
newmessage
然后将其作为传递给class Message(object):
def __init__(self, message):
self.set_text(message)
def set_text(self, message):
self.text = message.split(' ')
newmessage = Message("this is a test hello. this is a test.")
的参数之一:
NewLabel
每当您需要更改消息时,您都可以:
class NewLabel(ButtonBehavior, Label):
def __init__(self, **kwargs):
...
self.message = kwargs['message']
def eachwordprint(self, *args):
words = self.message.text
print "counter: ", self.counter
print "word length", len(words)
...
但是,如果您始终在 了解newmessage.set_text('this is the new test')
的部分代码中设置消息文本,则只需将其直接添加到NewLabel
即可} class:
NewLabel