【发布时间】:2020-10-02 23:28:44
【问题描述】:
我一直在尝试在 Kivy 上编写一个基于文本的小型冒险游戏。这意味着,将有大量文本供用户阅读,如果不是一次显示 Label 中的所有文本,而是以简单的方式逐个字符显示,这会更容易阅读“动画”。在这个“动画”结束时,将显示整个文本。
在普通的 Python 中,我想要的应该是这样的:
text1 = "Now tell me, what is your astrological sign?\n"
for character in text1:
sys.stdout.write(character)
sys.stdout.flush()
time.sleep(0.05)
在 Kivy 中,这似乎要困难得多,因为 sleep 函数只是“休眠”整个应用程序。我四处寻找,并没有真正找到任何关于这个特定问题的东西。其他一些人通过使用 Kivy Clock 对象解决了他们对 time.sleep 的需求,但即使在这里我也只能让文本一次显示一个字符(参见下面的代码),这绝对不是我想要的时间>。我希望所有字符加起来,并在这个“动画”结束时让整个标签文本站在那里。
from kivy.app import App
from kivy.lang import Builder
from kivy.properties import StringProperty
import time
from kivy.clock import Clock
kv = '''
BoxLayout:
orientation: 'vertical'
Label:
text: app.text
Button:
text: 'click me'
on_press: app.clicked()
'''
class MyApp(App):
text = StringProperty("hello world")
lst = [1,2,3,4,5,6,7,8,9,10]
def build(self):
return Builder.load_string(kv)
def clicked(self):
Clock.schedule_interval(self.clicked2, 0.5)
def clicked2(self, count):
if len(self.lst) == 0:
return False
self.text = "clicked!" + str(self.lst[len(self.lst)-1])
self.lst.pop()
if __name__ == '__main__':
MyApp().run()
这是我目前能想到的最好的,但同样,这甚至不是我真正想要的。
有没有人有更多经验可以帮助我解决这个问题?将不胜感激,谢谢!
【问题讨论】:
标签: python animation widget kivy label