def updateRulesModel(self): if self.classifier is not None: table = [] for i, r in enumerate(self.classifier.rules): table.append( (int(r.complexity), r.quality, r.classDistribution.abs, str(r.classifier.defaultValue), r.classDistribution, self.ruleText(r))) self.rulesTableModel = PyTableModel(table, self.headers) self.proxyModel.setSourceModel(self.rulesTableModel) self.tableView.resizeColumnsToContents() self.tableView.resizeRowsToContents()
def __init__(self, parent=None, signalManager=None, name="CN2 Rules Viewer"): OWWidget.__init__(self, parent, signalManager, name) self.inputs = [("Rule Classifier", orange.RuleClassifier, self.setRuleClassifier)] self.outputs = [("Data", ExampleTable), ("Features", AttributeList)] self.show_Rule_length = True self.show_Rule_quality = True self.show_Coverage = True self.show_Predicted_class = True self.show_Distribution = True self.show_Rule = True self.autoCommit = False self.selectedAttrsOnly = True self.loadSettings() ##### # GUI ##### box = OWGUI.widgetBox(self.controlArea, "Show Info", addSpace=True) box.layout().setSpacing(3) self.headers = [ "Rule length", "Rule quality", "Coverage", "Predicted class", "Distribution", "Rule" ] for i, header in enumerate(self.headers): OWGUI.checkBox(box, self, "show_%s" % header.replace(" ", "_"), header, tooltip="Show %s column" % header.lower(), callback=self.updateVisibleColumns) box = OWGUI.widgetBox(self.controlArea, "Output") box.layout().setSpacing(3) cb = OWGUI.checkBox(box, self, "autoCommit", "Commit on any change", callback=self.commitIf) OWGUI.checkBox(box, self, "selectedAttrsOnly", "Selected attributes only", tooltip="Send selected attributes only", callback=self.commitIf) b = OWGUI.button(box, self, "Commit", callback=self.commit, default=True) OWGUI.setStopper(self, b, cb, "changedFlag", callback=self.commit) OWGUI.rubber(self.controlArea) self.tableView = QTableView() self.tableView.setItemDelegate(PyObjectItemDelegate(self)) self.tableView.setItemDelegateForColumn(1, PyFloatItemDelegate(self)) self.tableView.setItemDelegateForColumn(2, PyFloatItemDelegate(self)) self.tableView.setItemDelegateForColumn(4, DistributionItemDelegate(self)) self.tableView.setItemDelegateForColumn( 5, MultiLineStringItemDelegate(self)) self.tableView.setSortingEnabled(True) self.tableView.setSelectionBehavior(QTableView.SelectRows) self.tableView.setAlternatingRowColors(True) self.rulesTableModel = PyTableModel([], self.headers) self.proxyModel = QSortFilterProxyModel(self) self.proxyModel.setSourceModel(self.rulesTableModel) self.tableView.setModel(self.proxyModel) self.connect( self.tableView.selectionModel(), SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), lambda is1, is2: self.commitIf()) self.connect(self.tableView.horizontalHeader(), SIGNAL("sectionClicked(int)"), lambda section: self.tableView.resizeRowsToContents()) self.mainArea.layout().addWidget(self.tableView) self.updateVisibleColumns() self.changedFlag = False self.classifier = None self.rules = [] self.resize(800, 600)