source: orange/docs/extend-widgets/rst/OWAttributeSampler.py @ 11593:6edc44eb9655

Revision 11593:6edc44eb9655, 2.9 KB checked in by Ales Erjavec <ales.erjavec@…>, 10 months ago (diff)

Updated Widget development tutorial.

RevLine 
[11049]1"""
2<name>Attribute Sampler</name>
3<description>Lets the user select a list of attributes and the class attribute</description>
4<icon>icons/AttributeSampler.png</icon>
5<priority>1020</priority>
6"""
[11593]7import Orange
[11049]8
9from OWWidget import *
10import OWGUI
11
12class OWAttributeSampler(OWWidget):
13    settingsList = []
[11593]14
15    # ~start context handler~
16    contextHandlers = {
17        "": DomainContextHandler(
18            "",
19            [ContextField("classAttribute", DomainContextHandler.Required),
20             ContextField("attributeList",
21                          DomainContextHandler.List +
22                          DomainContextHandler.SelectedRequired,
23                          selected="selectedAttributes")])}
24    # ~end context handler~
[11049]25
26    def __init__(self, parent=None, signalManager=None):
27        OWWidget.__init__(self, parent, signalManager, 'AttributeSampler')
28
[11593]29        self.inputs = [("Examples", Orange.data.Table, self.dataset)]
30        self.outputs = [("Examples", Orange.data.Table)]
[11049]31
32        self.icons = self.createAttributeIconDict()
33
34        self.attributeList = []
35        self.selectedAttributes = []
36        self.classAttribute = None
37        self.loadSettings()
38
[11593]39        OWGUI.listBox(self.controlArea, self, "selectedAttributes",
40                      "attributeList",
41                      box="Selected attributes",
42                      selectionMode=QListWidget.ExtendedSelection)
43
[11049]44        OWGUI.separator(self.controlArea)
[11593]45        self.classAttrCombo = OWGUI.comboBox(
46            self.controlArea, self, "classAttribute",
47            box="Class attribute")
48
[11049]49        OWGUI.separator(self.controlArea)
[11593]50        OWGUI.button(self.controlArea, self, "Commit",
51                     callback=self.outputData)
[11049]52
53        self.resize(150,400)
54
55
56    def dataset(self, data):
57        self.closeContext()
58
59        self.classAttrCombo.clear()
60        if data:
[11593]61            self.attributeList = [(attr.name, attr.varType)
62                                  for attr in data.domain]
[11049]63            self.selectedAttributes = []
64            for attrName, attrType in self.attributeList:
65                self.classAttrCombo.addItem(self.icons[attrType], attrName)
66            self.classAttribute = 0
67        else:
68            self.attributeList = []
69            self.selectedAttributes = []
70            self.classAttrCombo.addItem("")
71
72        self.openContext("", data)
73
74        self.data = data
75        self.outputData()
76
77
78    def outputData(self):
79        if not self.data:
80            self.send("Examples", None)
81        else:
[11593]82            newDomain = Orange.data.Domain(
83                [self.data.domain[i] for i in self.selectedAttributes],
84                self.data.domain[self.classAttribute])
85
86            newData = Orange.data.Table(newDomain, self.data)
[11049]87            self.send("Examples", newData)
88
89
90if __name__=="__main__":
91    appl = QApplication(sys.argv)
92    ow = OWAttributeSampler()
93    ow.show()
94
[11593]95    data = Orange.data.Table('iris.tab')
[11049]96    ow.dataset(data)
97
98    appl.exec_()
Note: See TracBrowser for help on using the repository browser.