【问题标题】:Having a label fade out in kivy有一个标签在kivy中淡出
【发布时间】:2016-05-22 23:03:46
【问题描述】:

所以如果有人试图点击播放并且还没有保存文件,我想显示一个标签。然后我希望它淡出。 while 循环起作用,将 alpha 的值减小到 0。只要我没有添加 self.remove_widget(no_save),它就会显示标签,但它只是保持为实心标签。任何帮助,将不胜感激。或者有更简单的方法吗?

class StartMenu(Screen):

    def check_save(self):
        global save_state
        if save_state == None:
            color = (0,1,0,1)
            while color[3] > 0:
                no_save = Label(text='No save file found. Please press New Game', color=color)
                self.add_widget(no_save)
                color = color [:3] + (color[3] - (.1),)
                time.sleep(.1)
                self.remove_widget(no_save)

【问题讨论】:

  • while 循环与sleep 一起阻塞了您的应用程序,这是一个非常糟糕的主意。相反,看看Animations
  • 好的,我会的!我还没有听说过。

标签: python label kivy fadeout


【解决方案1】:

与其自己做淡出,不如使用内置的Animation 功能?尝试这样的事情。我还建议将save_state 从全局领域移动到您的类,而不是每次运行都创建和销毁标签,而是在初始化时创建并在必要时简单地隐藏或显示它。

class StartMenu(Screen):

  def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.save_state = None
    no_save = Label('No save file found. Please press new game.', hidden=True)
    self.add_widget(no_save)


  def check_save(self):
    if not self.save_state:
       self.no_save.hidden = False
       def hide_label(w): w.hidden = True
       Animation(opacity=0, duration=1, on_complete=hide_label).start(self.no_save)

快点赞 zeeMonkeys 在我之前指出了 cmets 中的 Animation 解决方案。

【讨论】:

  • 谢谢我找到了 zeeMonkeez 建议的动画页面并让它工作。我确实有一个关于全球的问题。我需要在主游戏循环中访问保存状态信息,因此使用全局是否合适。 (我有代码,如果发现保存状态,它会将其加载到变量中,我需要在其他地方访问该信息,有没有更好的方法)
  • @Arkyris,有多种方法可以跨小部件共享数据。一种方法是简单地访问您的MainScreen 小部件(或您的主游戏循环功能所在)中的save_state 属性作为StartMenu 的属性。 (即,在MainScreen__init__ 中,放入self.start_menu = StartMenu(...),并在您的主游戏循环中,使用self.start_menu.save_state。)另一方面,如果您不认为保留save_state 作为属性值得,你可以只使用一个全局变量。我只在答案中更改了它,因为全局变量通常被认为是不好的做法。
  • 感谢您的回复,我听说全局变量被认为是不好的做法,但我还是编程新手,所以我不知道您描述的方法。虽然现在我知道了,但我会使用它。我也想知道制作游戏循环,我应该让它成为自己的类还是将它添加到人们玩游戏的屏幕上。什么是最佳做法?
  • @Arkyris,是否将游戏逻辑包含在屏幕或单独的类中主要是偏好问题,并且通常在很大程度上取决于应用程序。我个人是逻辑和接口分离的忠实拥护者,但在某些情况下,它会使事情变得不必要地复杂化。我建议您尝试两种选择,然后感受一下您更喜欢哪一种。
  • 谢谢克瓦茨。我会看看哪个最适合我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 2012-07-06
  • 2013-05-21
  • 1970-01-01
相关资源
最近更新 更多