Orange widget开发:如何遍历gui widget标签显示计算输出
Orange widget development: How to iterate through gui widget label to display output of calculation
我正在尝试使用 Orange 创建一个简单的小部件。它计算给定数据输入的平均值,但我不确定如何遍历 gui 小部件标签以在将每个实例上传到 Orange 时显示小部件框中的每个实例。
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
文本应该可以解决问题:
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)
我正在尝试使用 Orange 创建一个简单的小部件。它计算给定数据输入的平均值,但我不确定如何遍历 gui 小部件标签以在将每个实例上传到 Orange 时显示小部件框中的每个实例。
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
文本应该可以解决问题:
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)