Разработка оранжевого виджета: как перебирать метку графического интерфейса для отображения результатов расчета

1

Я пытаюсь создать простой виджет с помощью 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.

Как бы я прокрутил, чтобы создать и отобразить несколько ярлыков виджетов, чтобы они соответствовали результатам, полученным в результате среднего расчета? Я не уверен, где будет соответствовать цикл или есть простой шаг, который мне не хватает? Я просматриваю документацию и пытаюсь решить проблему, но не могу заставить ее работать.

Теги:
python-3.x
loops
orange

1 ответ

1
Лучший ответ

Сначала 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)
  • 0
    Спасибо! это потрясающе! Я понимаю свою ошибку

Ещё вопросы

Сообщество Overcoder
Наверх
Меню