kivy.NumericProperty不接受pd.DataFrame中的列的min():无效格式

时间:2019-05-09 08:17:33

标签: python kivy

我正在尝试创建一个滑块,其最大值作为在熊猫数据框的一列中找到的最小值(该数据框在执行过程中可能会更改)。如何更新NumericProperty的值(自动或至少在事件发生时)?

我尝试将滑块的max属性连接到KV文件和python脚本中的min()["A"]列的["B"]值,但是每次,我都会收到有关无效格式的错误消息(即使结果正确无误,并且如果min()是根据硬编码值而不是pd.DataFrame计算出来的,则应用也可以运行)。

testing.py

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.event import EventDispatcher
from kivy.properties import NumericProperty
import pandas as pd

class Stats(EventDispatcher):
    dt_min_u_freq = NumericProperty(0)

class Engine(object):
    def __init__(self):
        self.stats = Stats()
        self.data = pd.DataFrame([[1,5],[2,6],[3,7]], columns=["A", "B"])

    def update(self):

        a = min(self.data["A"])
        b =  min(self.data["B"])

        # This works
        # self.stats.dt_min_u_freq =  min(3,5)

        # This doesn't
        self.stats.dt_min_u_freq =  min(a,b)

class MainWindow(BoxLayout):
    pass

class TestingApp(App):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def build(self): 
        self.engine = Engine()
        self.main = MainWindow()
        return self.main


TestingApp().run()

testing.kv

# kivy: 1.10.1

<MainWindow>:
    Label:
        text: str(max_freq.max)

    Slider:
        id: max_freq
        max: app.engine.stats.dt_min_u_freq

    Button:
        text: "Push me"
        on_press: app.engine.update()

我希望将Slider的最大值更改为1。相反,我得到一个错误:

ValueError: Stats.dt_min_u_freq has an invalid format (got 1)

1 个答案:

答案 0 :(得分:0)

代码是正确的,重新安装依赖项可以修复该错误。谢谢@ikolim检查代码是否正常!