【问题标题】:Bind Label to a slider value in python将标签绑定到python中的滑块值
【发布时间】:2017-03-22 01:23:04
【问题描述】:

我是编程新手,我在这个论坛上阅读了一些教程和大量问题,但现在我陷入了困境。

我正在尝试使用一个标签来说明滑块的值。我在 Raspberry pi 3 上使用 python 3.4.2 和 kivy。

我松散地(好吧,不是那么松散地)将我的代码基于这篇文章:Display kivy slider value as it changes

这是我的(简化的)代码:

def OnFanSpeedSliderValueChange(instance,value):
    FanSpeedLabel.text = str(value) 

class LayoutTest(App):
    def build(self):

       FanSpeed = Slider(min=0, max=4, step=1)

       FanSpeed.bind(value=OnFanSpeedSliderValueChange)

       FanSpeedLabel = Label(text= str(FanSpeed.value))

当我移动滑块时,应用程序崩溃并出现此错误:

 FanSpeedLabel.text = str(value)            
 NameError: global name 'FanSpeedLabel' is not defined

我哪里做错了?任何指针将不胜感激!

附:当我让它工作时,我会尝试将它转换成 kivy 语言......因为为什么不呢?

【问题讨论】:

    标签: python-3.x kivy raspberry-pi3


    【解决方案1】:

    您将 FanSpeedLabel 声明为 局部变量 并尝试在 OnFanSpeedSliderValueChange

    中全局使用它

    开始,请将 OnFanSpeedSliderValueChange 设为全局

    FanSpeedLabel = None
    
    def OnFanSpeedSliderValueChange(instance,value):
        global FanSpeedLabel
        FanSpeedLabel.text = str(value) 
    
    class LayoutTest(App):
        def build(self):
           global FanSpeedLabel
           FanSpeed = Slider(min=0, max=4, step=1)
    
           FanSpeed.bind(value=OnFanSpeedSliderValueChange)
    
           FanSpeedLabel = Label(text= str(FanSpeed.value))
    

    也就是说,您应该使用 kv 语言更好地构建您的代码,并且不要使用全局变量 :)

    【讨论】:

    • 谢谢!我一定会试试的!
    【解决方案2】:

    再次感谢您的回答。它让我再次阅读并发现我的错误。我猜 Python 中的 Newby 错误......这是缩进的问题!我曾试图将我的变量设为本地但没有成功……因为它的缩进级别与它应该属于的 def build(self) 变量相同。

    总之,这解决了我的错误,我想,回答了你关于“不使用全局变量”的建议:

    class LayoutTest(App):
        def build(self):
    
        #-->| Just like that!  that little indentation!
            Def OnFanSpeedSliderValueChange(instance,value):
                FanSpeedLabel.text = str(value) 
    
    
       FanSpeed = Slider(min=0, max=4, step=1)
    
       FanSpeed.bind(value=OnFanSpeedSliderValueChange)
    
       FanSpeedLabel = Label(text= str(FanSpeed.value))
    

    我希望这对我以后遇到的其他新手有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      相关资源
      最近更新 更多