Я пытаюсь разработать виджет Orange, до этого момента я следовал учебному пособию: https://orange-development.readthedocs.io/tutorial-settings.html Когда вы добавляете код, представленный в учебнике, виджет перестает отображаться в Orange Тем не менее, когда вы отменяете изменения и go возвращаетесь к основному c виджету из первой части урока, все снова работает.
Я пытаюсь выяснить, что происходит, но я просто могу «т. Я ничего не нашел в документах до сих пор. Код для виджета, с которым я работал до сих пор, представлен ниже:
Не могли бы вы, ребята, помочь, пожалуйста?
import sys
import numpy
import Orange.data
from Orange.widgets import widget, gui
from Orange.widgets.utils.signals import Input, Output
class OWDataSamplerA(widget.OWWidget):
name = "Data Sampler"
description = "Randomly selects a subset of instances from the data set"
icon = "icons/DataSamplerA.svg"
priority = 10
class Inputs:
data = Input("Data", Orange.data.Table)
class Outputs:
sample = Output("Sampled Data", Orange.data.Table)
want_main_area = False
def __init__(self):
super().__init__()
# GUI
box = gui.widgetBox(self.controlArea, "Info")
self.infoa = gui.widgetLabel(
box, "No data on input yet, waiting to get something.")
self.infob = gui.widgetLabel(box, '')
@Inputs.data
def set_data(self, dataset):
if dataset is not None:
self.infoa.setText("%d instances in input data set" % len(dataset))
indices = numpy.random.permutation(len(dataset))
indices = indices[:int(numpy.ceil(len(dataset) * 0.1))]
sample = dataset[indices]
self.infob.setText("%d sampled instances" % len(sample))
self.Outputs.sample.send(sample)
else:
self.infoa.setText(
"No data on input yet, waiting to get something.")
self.infob.setText('')
self.Outputs.sample.send(None)
def main(argv=sys.argv):
from AnyQt.QtWidgets import QApplication
app = QApplication(list(argv))
args = app.arguments()
if len(args) > 1:
filename = args[1]
else:
filename = "iris"
ow = OWDataSamplerA()
ow.show()
ow.raise_()
dataset = Orange.data.Table(filename)
ow.set_data(dataset)
ow.handleNewSignals()
app.exec_()
ow.set_data(None)
ow.handleNewSignals()
return 0
if __name__ == "__main__":
sys.exit(main())