Как добавить настройки в виджет Orange? - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь разработать виджет 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())

...