def Paint(self): scene = QGraphicsScene() # Draw the graph tt = self.ui.graphtype.currentIndex() if tt == 0: points = self.avgSpeed elif tt == 1: points = self.avgVolume elif tt == 2: points = self.avgCapacity elif tt == 3: points = self.avgRam p0 = points[0] for p in points[1:]: scene.addLine(5 + p0[0] * 2, 205 - p0[1] * 2, 5 + p[0] * 2, 205 - p[1] * 2, QPen(self.settings["graph"])) p0 = p # Draw the axis scene.addLine(5, 5, 5, 208, QPen(self.settings["axis"])) scene.addLine(2, 205, self.time * 2 + 5, 205, QPen(self.settings["axis"])) t = 0 while t <= self.time: scene.addLine(5 + t * 2, 206, 5 + t * 2, 204, QPen(self.settings["axis"])) font = QFont() font.setPointSize(6) capt = scene.addText(str(t), font) capt.setPos(t * 2, 203) t += 10 self.ui.graph.setScene(scene)
def Paint(self): scene = QGraphicsScene() # Draw the graph tt = self.ui.graphtype.currentIndex() if tt == 0: points = self.avgSpeed elif tt == 1: points = self.avgVolume elif tt == 2: points = self.avgCapacity elif tt == 3: points = self.avgRam p0 = points[0] for p in points[1:]: scene.addLine(5 + p0[0] * 2, 205 - p0[1] * 2, 5 + p[0] * 2, 205 - p[1] * 2, QPen(self.settings["graph"])) p0 = p # Draw the axis scene.addLine(5, 5, 5, 208, QPen(self.settings["axis"])) scene.addLine(2, 205, self.time * 2 + 5, 205, QPen(self.settings["axis"])) t = 0 while t <= self.time: scene.addLine(5 + t * 2, 206, 5 + t * 2, 204, QPen(self.settings["axis"])) font = QFont() font.setPointSize(6) capt = scene.addText(str(t), font) capt.setPos(t * 2, 203) t += 10 self.ui.graph.setScene(scene)
def test(self): if not self.winManager: return from PyQt4.QtGui import QGraphicsScene, QGraphicsItem, QGraphicsLineItem from PyQt4.QtCore import QRectF, QLineF w = self.winManager.newWindow() scene = QGraphicsScene(w.graphicsView) scene.addItem(Items.Grid()) scene.addItem(Items.Axes()) line = scene.addLine(QLineF(0, 0, 0, 0)) cross = Items.NodeCross(movable=True) cross.addEdge(line, 1) scene.addItem(cross) help = scene.addText(QCoreApplication.translate('Graphics', 'Press "h" for help!')) help.moveBy(-50, 80) text = Items.NodeText(QCoreApplication.translate('Graphics', 'Drag Me!')) text.setFlag(QGraphicsItem.ItemIsMovable, True) text.setFlag(QGraphicsItem.ItemIsSelectable, True) text.addEdge(line, 2) scene.addItem(text) w.graphicsView.setScene(scene)
def __init__(self, *args): scene = QGraphicsScene(args[0]) scene.setSceneRect(0,0,600.0,SCENE_HEIGHT) QGraphicsView.__init__(self, scene, *args) scene = self.scene() self.yAxis = scene.addLine(PADDING, PADDING, PADDING, scene.height() - PADDING) self.xAxis = scene.addLine(PADDING, scene.height() - PADDING, scene.width() - PADDING, scene.height() - PADDING) self.bars = [] self.barLabels = [] self.xLabels = [] self.yLabels = [] self.values = [] self.show() self.raise_()
class Plotter(QObject): def __init__(self, dimensions, main_title, x_title, y_title): QObject.__init__(self) self.dimensions = dimensions self.scene = QGraphicsScene() self.main_title = TextItem(main_title, self.scene, self.dimensions, main_title_transform) self.x_title = TextItem(x_title, self.scene, self.dimensions, x_title_transform) self.y_title = TextItem(y_title, self.scene, self.dimensions, y_title_transform) if config.debug.plotter.show_margin_boxes: self.debug_margin_boxes = [] dimensions.changed.connect(self.show_margin_boxes) self.show_margin_boxes() def show_margin_boxes(self): for rect in self.debug_margin_boxes: self.scene.removeItem(rect) r = [] r.append(self.scene.addRect(0,0, self.dimensions.left_margin, self.dimensions.height, red, red_t)) r.append(self.scene.addRect(0,0, self.dimensions.width, self.dimensions.top_margin, green, green_t)) r.append(self.scene.addRect(0, self.dimensions.top_margin + self.dimensions.grid_height, self.dimensions.width, self.dimensions.bottom_margin, blue, blue_t)) r.append(self.scene.addRect(self.dimensions.width, self.dimensions.height, -self.dimensions.right_margin, -self.dimensions.height, cyan, cyan_t)) halfway_height = self.dimensions.top_margin + self.dimensions.grid_height/2 r.append(self.scene.addLine(0, halfway_height, self.dimensions.width, halfway_height, QPen(black, 0))) halfway_width = self.dimensions.left_margin + self.dimensions.grid_width/2 r.append(self.scene.addLine(halfway_width, 0, halfway_width, self.dimensions.height, QPen(black, 0))) self.debug_margin_boxes = r
def Paint(self): scene = QGraphicsScene() hor = self.ui.horizontal.currentIndex() vert = self.ui.vertical.currentIndex() v = {"a": [], "d": [], "c": [], "r": [], "f": []} h = {"a": [], "d": [], "c": [], "r": [], "f": []} for alg in self.algs: projects = [] if hor == 0: projects = sorted(self.stats[alg].values(),key=lambda x: 1.0 / 3.0 * (x["computersload"] + x["storesload"] + x["ramload"])) elif hor == 1: projects = sorted(self.stats[alg].values(),key=lambda x: 0.5*(x["computersload"]+x["ramload"])) elif hor == 2: projects = sorted(self.stats[alg].values(),key=lambda x: x["computersload"]) elif hor == 3: projects = sorted(self.stats[alg].values(),key=lambda x: x["ramload"]) elif hor == 4: projects = sorted(self.stats[alg].values(),key=lambda x: x["storesload"]) if projects == []: return for proj in projects: if vert == 0: v[alg].append(proj["assigned"]) elif vert == 1: v[alg].append(proj["ratio"]) elif vert == 2: v[alg].append(proj["replicas"]) if hor == 0: h[alg].append(1.0 / 3.0 * (proj["computersload"] + proj["storesload"] + proj["ramload"])) elif hor == 1: h[alg].append(0.5 * (proj["computersload"] + proj["ramload"])) elif hor == 2: h[alg].append(proj["computersload"]) elif hor == 3: h[alg].append(proj["ramload"]) elif hor == 4: h[alg].append(proj["storesload"]) maxnum = max([max(v[i]) for i in self.algs] + [1]) scene.addLine(5, 5, 5, 213, QPen(self.settings["axis"])) scene.addLine(2, 210, 210, 210, QPen(self.settings["axis"])) for i in range(10): scene.addLine(5 + (i + 1) * 20, 209, 5 + (i + 1) * 20, 211, QPen(self.settings["axis"])) scene.addLine(4, 210 - (i + 1) * 20, 6, 210 - (i + 1) * 20, QPen(self.settings["axis"])) font = QFont() font.setPointSize(6) t1 = scene.addText(str(0.1*(i + 1)), font) t1.setPos((i + 1) * 20, 212) if int(0.1*maxnum*(i + 1)) != 0: t2 = scene.addText(str(int(0.1*maxnum*(i + 1))), font) t2.setPos(-10, 200 - (i + 1) * 20) legendy = 10 for alg in self.algs: x0 = h[alg][0] y0 = v[alg][0] color = QColor(random.randint(1, 255), random.randint(1, 255), random.randint(1, 255)) brush = QBrush(color) color = QPen(color) for x,y in zip(h[alg],v[alg]): scene.addLine(5 + x0 * 200, 210 - float(y0)/maxnum * 200, 5 + x * 200, 210 - float(y)/maxnum * 200, color) scene.addLine(5 + x * 200 - 2, 210 - float(y)/maxnum * 200 - 2 , 5 + x * 200 + 2, 210 - float(y)/maxnum * 200 + 2, color) scene.addLine(5 + x * 200 + 2, 210 - float(y)/maxnum * 200 - 2, 5 + x * 200 - 2, 210 - float(y)/maxnum * 200 + 2, color) x0 = x y0 = y scene.addRect(220, legendy, 5, 5, color, brush) t = scene.addText(algnames[alg], font) t.setPos(230, legendy-5) legendy += 10 self.ui.graph.setScene(scene)
class ModuleAWidget(QWidget): def __init__(self): QWidget.__init__(self) self.ui = Ui_ModuleA() self.ui.setupUi(self) self.timer = QTimer() QObject.connect(self.timer, SIGNAL("timeout()"), self.read_inputs) self.data = 200 * [0.0] def read_inputs(self): r = self.dev.read() u = r[1] / 1023.0 * 3.3 self.dev.pwm(1, int(u * 65536.0 / 3.3)) self.ui.labelU.setText('%0.3f V' % u) self.ui.progressU.setValue(1000 * u) self.data.pop(0) self.data.append(u) self.scene = QGraphicsScene() self.scene.addLine(-10, 400 - 0, 610, 400 - 0) self.scene.addLine(0, 400 + 10, 0, 400 - 410) self.scene.addLine(-10, 400 - 50, 10, 400 - 50) self.scene.addLine(-10, 400 - 100, 10, 400 - 100) self.scene.addLine(-10, 400 - 150, 10, 400 - 150) self.scene.addLine(-10, 400 - 200, 10, 400 - 200) self.scene.addLine(-10, 400 - 250, 10, 400 - 250) self.scene.addLine(-10, 400 - 300, 10, 400 - 300) self.scene.addLine(-10, 400 - 350, 10, 400 - 350) self.scene.addLine(-10, 400 - 400, 10, 400 - 400) self.scene.addSimpleText('4.0').moveBy(-40, 0 - 10) self.scene.addSimpleText('3.5').moveBy(-40, 50 - 10) self.scene.addSimpleText('3.0').moveBy(-40, 100 - 10) self.scene.addSimpleText('2.5').moveBy(-40, 150 - 10) self.scene.addSimpleText('2.0').moveBy(-40, 200 - 10) self.scene.addSimpleText('1.5').moveBy(-40, 250 - 10) self.scene.addSimpleText('1.0').moveBy(-40, 300 - 10) self.scene.addSimpleText('0.5').moveBy(-40, 350 - 10) self.scene.addSimpleText('0.0').moveBy(-40, 400 - 10) self.scene.addSimpleText('[U/V]').moveBy(-39, 430 - 10) path = QPainterPath() path.moveTo(0, 400 - self.data[0] * 100) for i in xrange(1, 200): path.lineTo(3 * (i + 1), 400 - self.data[i] * 100) self.scene.addPath(path, QPen(QColor(0, 0, 255), 3)) self.ui.graphU.setScene(self.scene)
class ElevationScene(object): def __init__(self, dialog, view): self.dialog = dialog self.view = view self.scene = None self.line = None self.path = None self.zone = None self.pts = {} self.y_delta = { PT1: 0., PT2: 0. } self.fresnel_visible = False self.frequency = 2400 @staticmethod def path_for(points): path = QPainterPath(points[0]) for point in points[1:]: path.lineTo(point) path.lineTo(points[-1].x(), 0) path.lineTo(points[0].x(), 0) path.lineTo(points[0]) return path @staticmethod def overlay_for(pt1, pt2, frequency): # Construct the line-geometry, we'll use this to construct the ellipsoid line = QLineF(pt1, pt2) # Determine the radius for the ellipsoid radius = fresnel_radius(line.length(), frequency) # Draw the ellipsoid zone = QPainterPath() zone.addEllipse(QPointF(0., 0.), line.length() / 2, radius) # Rotate the ellipsoid - same angle as the line transform = QTransform() transform.rotate(-line.angle()) zone = transform.map(zone) # Center the zone over the line lc = QRectF(pt1, pt2).center() zc = zone.boundingRect().center() zone.translate(lc.x() - zc.x(), lc.y() - zc.y()) return line, zone def initialize(self, points, show_fresnel, frequency): self.pts = { PT1: points[0], PT2: points[-1] } self.fresnel_visible = show_fresnel self.frequency = frequency # Construct static geometry to be included in the scene path = self.path_for(points) height = path.boundingRect().height() gradient = QLinearGradient(QPointF(0., height), QPointF(0., 0.)) gradient.setColorAt(0, QColor(0x00b300)) gradient.setColorAt(1, QColor(0x331a00)) # Create the scene self.scene = QGraphicsScene(self.dialog) # Add geometries to the scene, keeping a reference to each self.path = self.scene.addPath(path, QPen(Qt.blue, 1), QBrush(gradient)) # Update the scene; i.e. correct pen-colours etc. self.update_scene(add_geometries=True) # Set up the view with the constructed scene self.view.setScene(self.scene) self.view.ensureVisible(self.scene.sceneRect()) self.view.scale(1., -1.) def update_scene(self, add_geometries=False): # Get new geometries line, zone = self.overlay_for( self.pts[PT1] + QPointF(0., self.y_delta[PT1]), self.pts[PT2] + QPointF(0., self.y_delta[PT2]), self.frequency ) # And update the line geometry - this shall be reflected in the scene if add_geometries: self.line = self.scene.addLine(line) self.zone = self.scene.addPath(zone) else: self.line.setLine(line) self.zone.setPath(zone) # Colour the line & zone as appropriate for item in (self.line, self.zone): item.setPen(RPEN if item.collidesWithItem(self.path) else GPEN) # Show/hide the fresnel zone as requested self.zone.setVisible(self.fresnel_visible) def zoom_event(self, pos, delta): # Save the scene pos old_pos = self.view.mapToScene(pos) # Zoom zoom_factor = ZOOM_IN_FACTOR if delta > 0 else ZOOM_OUT_FACTOR self.view.scale(zoom_factor, zoom_factor) # Translate scene such that zoom appears to center on mouse pointer pos new_pos = self.view.mapToScene(pos) delta = new_pos - old_pos self.view.translate(delta.x(), delta.y()) def slider_event(self, point, value): self.y_delta[point] = value self.update_scene() def fresnel_event(self, show_fresnel, value): self.fresnel_visible = show_fresnel self.frequency = value self.update_scene()
def Paint(self): scene = QGraphicsScene() scene.setBackgroundBrush(Qt.transparent) scene.addLine(5, 5, 5, 213, QPen(self.settings["axis"])) scene.addLine(2, 210, 210, 210, QPen(self.settings["axis"])) mod_num = int(self.ui.moduleNum.currentText()) max_sim = max(self.points_sim, key=lambda x: x[mod_num])[mod_num] max_mm = max(self.points_mm, key=lambda x: x[mod_num])[mod_num] max_time = max(max_mm, max_sim) for i in range(10): scene.addLine(4, 210 - (i + 1) * 20, 6, 210 - (i + 1) * 20, QPen(self.settings["axis"])) font = QFont() font.setPointSize(6) if int(0.1*max_time*(i + 1)) != 0: t2 = scene.addText(str(int(0.1*max_time*(i + 1))), font) t2.setPos(-18, 200 - (i + 1) * 20) i = 1 x0 = 5 + 200 / self.num y0 = 210 - float(self.points_mm[0][mod_num]) / max_time * 200 for p in self.points_mm: x = 5 + i * 200 / self.num y = 210 - float(p[mod_num])/max_time * 200 scene.addLine(x0, y0, x, y, QPen(self.settings["mm"])) scene.addLine(x - 2, y - 2, x + 2, y + 2, QPen(self.settings["mm"])) scene.addLine(x + 2, y - 2, x - 2, y + 2, QPen(self.settings["mm"])) x0 = x y0 = y i += 1 i = 1 x0 = 5 + 200 / self.num y0 = 210 - float(self.points_sim[0][mod_num]) / max_time * 200 for p in self.points_sim: x = 5 + i * 200 / self.num y = 210 - float(p[mod_num])/max_time * 200 scene.addLine(x0, y0, x, y, QPen(self.settings["sim"])) scene.addLine(x - 2, y - 2, x + 2, y + 2, QPen(self.settings["sim"])) scene.addLine(x + 2, y - 2, x - 2, y + 2, QPen(self.settings["sim"])) x0 = x y0 = y i += 1 self.ui.graph.setScene(scene) self.ui.table.setRowCount(len(self.simplesystems)) self.simplesystems.sort(key = lambda x: x.simrel) for i in range(len(self.simplesystems)): self.ui.table.setItem(i, 0, QTableWidgetItem(self.simplesystems[i].id)) self.simplesystems.sort(key = lambda x: x.mmrel) for i in range(len(self.simplesystems)): self.ui.table.setItem(i, 1, QTableWidgetItem(self.simplesystems[i].id)) if self.ui.table.item(i, 0).text() != self.ui.table.item(i, 1).text(): self.ui.table.item(i, 0).setForeground(QBrush(QColor(255,0,0))) self.ui.table.item(i, 1).setForeground(QBrush(QColor(255,0,0))) else: self.ui.table.item(i, 0).setForeground(QBrush(QColor(0,255,0))) self.ui.table.item(i, 1).setForeground(QBrush(QColor(0,255,0))) self.simplesystems.sort(key = lambda x: x.rel) for i in range(len(self.simplesystems)): self.ui.table.setItem(i, 2, QTableWidgetItem(self.simplesystems[i].id))
class ModuleAWidget(QWidget): def __init__(self): QWidget.__init__(self) self.ui = Ui_ModuleA() self.ui.setupUi(self) self.timer = QTimer() QObject.connect(self.timer, SIGNAL("timeout()"), self.read_inputs) self.data = 200*[0.0] def read_inputs(self): r = self.dev.read() u = r[1]/1023.0 * 3.3 self.dev.pwm(1, int(u*65536.0/3.3)) self.ui.labelU.setText('%0.3f V' % u) self.ui.progressU.setValue(1000*u) self.data.pop(0) self.data.append(u) self.scene = QGraphicsScene() self.scene.addLine(-10, 400-0, 610, 400-0) self.scene.addLine(0, 400+10, 0, 400-410) self.scene.addLine(-10, 400- 50, 10, 400- 50) self.scene.addLine(-10, 400-100, 10, 400-100) self.scene.addLine(-10, 400-150, 10, 400-150) self.scene.addLine(-10, 400-200, 10, 400-200) self.scene.addLine(-10, 400-250, 10, 400-250) self.scene.addLine(-10, 400-300, 10, 400-300) self.scene.addLine(-10, 400-350, 10, 400-350) self.scene.addLine(-10, 400-400, 10, 400-400) self.scene.addSimpleText('4.0').moveBy(-40, 0-10) self.scene.addSimpleText('3.5').moveBy(-40, 50-10) self.scene.addSimpleText('3.0').moveBy(-40, 100-10) self.scene.addSimpleText('2.5').moveBy(-40, 150-10) self.scene.addSimpleText('2.0').moveBy(-40, 200-10) self.scene.addSimpleText('1.5').moveBy(-40, 250-10) self.scene.addSimpleText('1.0').moveBy(-40, 300-10) self.scene.addSimpleText('0.5').moveBy(-40, 350-10) self.scene.addSimpleText('0.0').moveBy(-40, 400-10) self.scene.addSimpleText('[U/V]').moveBy(-39, 430-10) path = QPainterPath() path.moveTo(0,400-self.data[0]*100) for i in xrange(1,200): path.lineTo(3*(i+1), 400-self.data[i]*100) self.scene.addPath(path, QPen(QColor(0,0,255), 3)) self.ui.graphU.setScene(self.scene)
def Paint(self): scene = QGraphicsScene() hor = self.ui.horizontal.currentIndex() vert = self.ui.vertical.currentIndex() v = {"a": [], "d": [], "c": [], "r": [], "f": []} h = {"a": [], "d": [], "c": [], "r": [], "f": []} for alg in self.algs: projects = [] if hor == 0: projects = sorted(self.stats[alg].values(),key=lambda x: 1.0 / 3.0 * (x["computersload"] + x["storesload"] + x["ramload"])) elif hor == 1: projects = sorted(self.stats[alg].values(),key=lambda x: 0.5*(x["computersload"]+x["ramload"])) elif hor == 2: projects = sorted(self.stats[alg].values(),key=lambda x: x["computersload"]) elif hor == 3: projects = sorted(self.stats[alg].values(),key=lambda x: x["ramload"]) elif hor == 4: projects = sorted(self.stats[alg].values(),key=lambda x: x["storesload"]) if projects == []: return for proj in projects: if vert == 0: v[alg].append(proj["assigned"]) elif vert == 1: v[alg].append(proj["ratio"]) elif vert == 2: v[alg].append(proj["replicas"]) if hor == 0: h[alg].append(1.0 / 3.0 * (proj["computersload"] + proj["storesload"] + proj["ramload"])) elif hor == 1: h[alg].append(0.5 * (proj["computersload"] + proj["ramload"])) elif hor == 2: h[alg].append(proj["computersload"]) elif hor == 3: h[alg].append(proj["ramload"]) elif hor == 4: h[alg].append(proj["storesload"]) maxnum = max([max(v[i]) for i in self.algs] + [1]) scene.addLine(5, 5, 5, 213, QPen(self.settings["axis"])) scene.addLine(2, 210, 210, 210, QPen(self.settings["axis"])) for i in range(10): scene.addLine(5 + (i + 1) * 20, 209, 5 + (i + 1) * 20, 211, QPen(self.settings["axis"])) scene.addLine(4, 210 - (i + 1) * 20, 6, 210 - (i + 1) * 20, QPen(self.settings["axis"])) font = QFont() font.setPointSize(6) t1 = scene.addText(str(0.1*(i + 1)), font) t1.setPos((i + 1) * 20, 212) if int(0.1*maxnum*(i + 1)) != 0: t2 = scene.addText(str(int(0.1*maxnum*(i + 1))), font) t2.setPos(-10, 200 - (i + 1) * 20) legendy = 10 for alg in self.algs: x0 = h[alg][0] y0 = v[alg][0] color = QColor(random.randint(1, 255), random.randint(1, 255), random.randint(1, 255)) brush = QBrush(color) color = QPen(color) for x,y in zip(h[alg],v[alg]): scene.addLine(5 + x0 * 200, 210 - float(y0)/maxnum * 200, 5 + x * 200, 210 - float(y)/maxnum * 200, color) scene.addLine(5 + x * 200 - 2, 210 - float(y)/maxnum * 200 - 2 , 5 + x * 200 + 2, 210 - float(y)/maxnum * 200 + 2, color) scene.addLine(5 + x * 200 + 2, 210 - float(y)/maxnum * 200 - 2, 5 + x * 200 - 2, 210 - float(y)/maxnum * 200 + 2, color) x0 = x y0 = y scene.addRect(220, legendy, 5, 5, color, brush) t = scene.addText(algnames[alg], font) t.setPos(230, legendy-5) legendy += 10 self.ui.graph.setScene(scene)