我正在尝试创建一个滑块,其最大值作为在熊猫数据框的一列中找到的最小值(该数据框在执行过程中可能会更改)。如何更新NumericProperty的值(自动或至少在事件发生时)?
我尝试将滑块的max
属性连接到KV文件和python脚本中的min()
和["A"]
列的["B"]
值,但是每次,我都会收到有关无效格式的错误消息(即使结果正确无误,并且如果min()
是根据硬编码值而不是pd.DataFrame计算出来的,则应用也可以运行)。
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()
# 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)
答案 0 :(得分:0)
代码是正确的,重新安装依赖项可以修复该错误。谢谢@ikolim检查代码是否正常!