def on_draw(self): draw_mode = self.mode_combo.currentText() self.axes.clear() if self.g != None: if hasattr(self.g, 'destruct'): self.g.destruct() if draw_mode == "Graph Test": self.g = GraphTest(self) elif draw_mode == "Graph Test Numpy": self.g = GraphTestNumPy(self) elif draw_mode == "STEP Hierarchy": self.g = GraphHierarchy(self) elif draw_mode == "STEP Co-occurence": self.g = GraphCoOccurrence(self) elif draw_mode == "STEP Context": self.g = GraphCoOccurrence(self) self.connect(self.node_size, QtCore.SIGNAL('valueChanged(int)'), self.g.set_node_mult) self.axes.grid(self.draw_grid_tf) self.canvas.draw()
class BrowserMatPlotFrame(QtGui.QWidget): "定义画图的页面" def __init__(self, parent = None): QtGui.QWidget.__init__(self) self.parent = parent self.status_bar = parent.status_bar #State self.draw_node_labels_tf = True self.draw_axis_units_tf = False self.draw_grid_tf = False self.g = None #PATH used in drawing STEP hierarchy, co-occurence, context self.step_path = parent.step_path #MPL figure self.dpi = 100 self.fig = Figure((5.0, 4.0), dpi=self.dpi) self.fig.subplots_adjust(left=0,right=1,top=1,bottom=0) #QT canvas self.canvas = FigureCanvas(self.fig) self.canvas.setParent(self) self.canvas.mpl_connect('pick_event', self.on_pick) #used when selectingpyth canvas objects self.canvas.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.axes = self.fig.add_subplot(111) #self.axes.hold(False) #clear the axes every time plot() is called self.mpl_toolbar = NavigationToolbar(self.canvas, self) #GUI controls self.mode_combo = QComboBox() self.mode_combo.addItems(["Graph Test", "Graph Test Numpy", "STEP Hierarchy", "STEP Co-occurence", "STEP Context"]) self.mode_combo.setMinimumWidth(200) self.draw_button = QPushButton("&Draw/Refresh") self.connect(self.draw_button, QtCore.SIGNAL('clicked()'), self.on_draw) self.node_size = QSpinBox(self) self.node_size.setSingleStep(5) self.node_size.setMaximum(100) self.node_size.setValue(25) self.node_size_label = QLabel('Node Size (%):') # connection set in on_draw() method #Horizontal layout hbox = QtGui.QHBoxLayout() #Adding matplotlib widgets for w in [self.mode_combo, 's', self.node_size_label, self.node_size, self.draw_button]: if w == 's': hbox.addStretch() else: hbox.addWidget(w) hbox.setAlignment(w, Qt.AlignVCenter) #Vertical layout. Adding all other widgets, and hbox layout. vbox = QtGui.QVBoxLayout() vbox.addWidget(self.mpl_toolbar) vbox.addWidget(self.canvas) vbox.addLayout(hbox) self.setLayout(vbox) self.canvas.setFocus(True) def draw_axis_units(self): fw = self.fig.get_figwidth() fh = self.fig.get_figheight() l_margin = .4 / fw #.4in b_margin = .3 / fh #.3in if self.draw_axis_units_tf == True: self.fig.subplots_adjust(left=l_margin,right=1,top=1,bottom=b_margin) else: self.fig.subplots_adjust(left=0,right=1,top=1,bottom=0) self.canvas.draw() def draw_grid(self): if self.draw_grid_tf == False: self.draw_grid_tf = True else: self.draw_grid_tf = False self.axes.grid(self.draw_grid_tf) self.canvas.draw() def on_draw(self): draw_mode = self.mode_combo.currentText() self.axes.clear() if self.g != None: if hasattr(self.g, 'destruct'): self.g.destruct() if draw_mode == "Graph Test": self.g = GraphTest(self) elif draw_mode == "Graph Test Numpy": self.g = GraphTestNumPy(self) elif draw_mode == "STEP Hierarchy": self.g = GraphHierarchy(self) elif draw_mode == "STEP Co-occurence": self.g = GraphCoOccurrence(self) elif draw_mode == "STEP Context": self.g = GraphCoOccurrence(self) self.connect(self.node_size, QtCore.SIGNAL('valueChanged(int)'), self.g.set_node_mult) self.axes.grid(self.draw_grid_tf) self.canvas.draw() def on_pick(self, args): print "in matplotframe: ", args def resizeEvent(self, ev): self.draw_axis_units() def set_step_path(self, path): self.step_path = path self.parent.set_step_path(path) def toggle_axis_units(self): if self.draw_axis_units_tf == False: self.draw_axis_units_tf = True else: self.draw_axis_units_tf = False self.draw_axis_units() def toggle_node_labels(self): if self.draw_node_labels_tf == False: self.draw_node_labels_tf = True else: self.draw_node_labels_tf = False if self.g != None: self.g.redraw()