Я пытаюсь создать простой виджет с помощью Orange. Он вычисляет среднее значение данных ввода данных, но я не уверен, как выполнять итерацию с помощью ярлыка виджета gui, чтобы отображать каждый экземпляр внутри окна виджетов, когда он загружается в оранжевый.
import Orange
import Orange.data
from Orange.widgets.widget import OWWidget, Input, Output
from Orange.widgets import gui
class OWtest(OWWidget):
name = "Mean Data"
description = "Mean of data attributes"
#icon = ".svg"
priority = 20
class Inputs:
data = Input("Data", Orange.data.Table)
class Outputs:
infoData = Output("Info Data", Orange.data.Table)
want_main_area = False
def __init__(self):
super().__init__()
box = gui.widgetBox(self.controlArea, "Info")
self.line_a = gui.widgetLabel(box, 'No data present')
@Inputs.data
def set_data(self, dataset):
if dataset is not None:
for d in dataset:
print(d)
average = lambda x: sum(x)/len(x)
for x in dataset.domain.attributes:
self.line_a.setText("%s %.2f" % (x.name, average([d[x] for d in dataset])))
print("%s %.2f" % (x.name, average([d[x] for d in dataset])))
На данный момент он показывает только одну строку в окне виджета, где я только определил self.line_a.
Как бы я прокрутил, чтобы создать и отобразить несколько ярлыков виджетов, чтобы они соответствовали результатам, полученным в результате среднего расчета? Я не уверен, где будет соответствовать цикл или есть простой шаг, который мне не хватает? Я просматриваю документацию и пытаюсь решить проблему, но не могу заставить ее работать.
Сначала line_a
полную строку и только затем установите ее как текст line_a
чтобы сделать трюк:
text = '\n'.join("%s %.2f" % (x.name, average([d[x] for d in dataset]))
for x in dataset.domain.attributes)
self.line_a.setText(text)