簡體   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