繁体   English   中英

append 值动态微调器

[英]append values to spinner dynamically

我正在尝试使用Kivy编写一些基本的 GUI。

我的程序从包含未知行数的 CSV 文件加载一些数据。

第一列称为 sValue,它基本上告诉我微调器的“id”,第二列有一个 Name 值。

我的目标是迭代此 CSV 中的所有行,并根据 CSV 具有的不同数量的“id”动态创建 x 微调器,并在每个微调器中显示它可能具有的值。

例如,如果 CSV 如下所示:

sValue    Name
1           a
1           b
2           a
3           a
3           b
3           c

我希望代码创建 3 个微调器,其中在微调器 1 中它将具有值 a、b。 微调器 2 的值为 a,微调器 3 的值为 a,b,c。

我写了下面的代码,但它只显示了最后添加的值(我猜是因为它总是创建一个新的微调器而不是附加):

from kivy.uix.label import Label
from kivy.uix.spinner import Spinner
from kivy.uix.floatlayout import FloatLayout
from kivy.app import App

import pandas as pd

def loadData():
    data = pd.read_csv('data.csv')
    SValues = range(min(data['sValue']),max(data['sValue']))
    return data, SValues

class MainApp(App):
    def build(self):
        Data, SValues = loadData()
        layout = self.initializeScreen(Data,SValues)
        return layout

    def initializeScreen(self, Data, SValues):
        self.spinnerObject = {}
        self.imageObject = {}
        complete_layout = FloatLayout()

        s_layout = FloatLayout()
        for ind, row in Data.iterrows():
            self.labelObject = Label(text='S %d' % row['sValue'], bold=True)
            self.labelObject.size_hint  = (1/len(SValues), 0.05)
            self.labelObject.pos_hint={'x': (row['sValue']-1)/len(SValues), 'y':0.8}
            s_layout.add_widget(self.labelObject)

            self.spinnerObject[row['sValue']] = Spinner(text='sValue %d' % row['sValue'], values=row['Name'])
            self.spinnerObject[row['sValue']].size_hint  = (1/len(SValues), 0.1)
            self.spinnerObject[row['sValue']].pos_hint={'x': (row['sValue']-1)/len(SValues), 'y':0.7}
            s_layout.add_widget(self.spinnerObject[row['sValue']])
    
            
        complete_layout.add_widget(s_layout)

        
        return complete_layout

if __name__ == '__main__':
    MainApp().run()

我得到的是这样的:

在此处输入图像描述

您可以修改循环以将值添加到现有的Spinner实例:

    for ind, row in Data.iterrows():
        try:
            spinner = self.spinnerObject[row['sValue']]
        except:
            spinner = Spinner(text='sValue %d' % row['sValue'], values=[])
            self.spinnerObject[row['sValue']] = spinner
            self.spinnerObject[row['sValue']].size_hint = (1 / len(SValues), 0.1)
            self.spinnerObject[row['sValue']].pos_hint = {'x': (row['sValue'] - 1) / len(SValues), 'y': 0.7}
            s_layout.add_widget(self.spinnerObject[row['sValue']])
        spinner.values.append(row['Name'])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM