[英]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.