示例#1
0
class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.setupGUI()

    def setupGUI(self):
        layout = QGridLayout()
        self.widget = QWidget()
        self.widget.setLayout(layout)
        self.setCentralWidget(self.widget)
        self.setWindowTitle("Zargan Network Analyzer")

        data = "%s/data/filtered.txt" % os.path.abspath(os.path.curdir)

        self.input_file_label = QLabel("Input File")
        self.input_file_edit = QLineEdit(data)
        self.browse_button = QPushButton("Browse")

        self.line_count_label = QLabel("First N lines")
        self.line_count_edit = QLineEdit()
        self.line_count_edit.setText("500000")

        self.window_size_label = QLabel("Window Size (seconds)")
        self.window_size_spin = QSpinBox()
        self.window_size_spin.setRange(1, 999999)
        self.window_size_spin.setMaximum(999999)
        self.window_size_spin.setValue(300)
        self.window_size_spin.setSingleStep(1)

        self.threshold_label = QLabel("Edge Threshold")
        self.threshold_spin = QSpinBox()
        self.threshold_spin.setValue(20)
        self.threshold_spin.setRange(0, 1000)
        self.threshold_spin.setSingleStep(1)


        self.per_ip_label = QLabel("Maximum Search per IP")
        self.per_ip_spin = QSpinBox()
        self.per_ip_spin.setMaximum(999999)
        self.per_ip_spin.setValue(1000)
        self.per_ip_spin.setRange(0, 100000)
        self.per_ip_spin.setSingleStep(100)


        self.per_session_label = QLabel("Maximum Search per Session")
        self.per_session_spin = QSpinBox()
        self.per_session_spin.setMaximum(999999)
        self.per_session_spin.setValue(100)
        self.per_session_spin.setRange(0, 1000)
        self.per_session_spin.setSingleStep(1)


        self.generate_graph_check = QCheckBox("Generate Graph")
        self.complete_chain_check = QCheckBox("Complete Chain")
        self.start_button = QPushButton("Start")
        self.stop_button = QPushButton("Stop")
        #self.output_button = QPushButton("Display Output")



        layout.addWidget(self.input_file_label, 0, 0)
        layout.addWidget(self.input_file_edit, 0, 1)
        layout.addWidget(self.browse_button, 0, 2)
        layout.addWidget(self.line_count_label, 1, 0)
        layout.addWidget(self.line_count_edit, 1, 1)
        layout.addWidget(self.window_size_label, 2, 0)
        layout.addWidget(self.window_size_spin, 2, 1)
        layout.addWidget(self.threshold_label, 3, 0)
        layout.addWidget(self.threshold_spin, 3, 1)

        layout.addWidget(self.per_ip_label, 4, 0)
        layout.addWidget(self.per_ip_spin, 4, 1)

        layout.addWidget(self.per_session_label, 5, 0)
        layout.addWidget(self.per_session_spin, 5, 1)

        layout.addWidget(self.generate_graph_check, 6, 0)
        layout.addWidget(self.complete_chain_check, 7, 0)
        layout.addWidget(self.start_button, 8, 0)
        layout.addWidget(self.stop_button, 8, 1)
        #layout.addWidget(self.output_button, 7, 0)


        self.connectSlots()

    def connectSlots(self):
        """
        Connects signals to slots.
        """
        self.connect(self.browse_button, SIGNAL('clicked()'), self.browseFile)
        self.connect(self.stop_button, SIGNAL('clicked()'), self.stop)
        self.connect(self.start_button, SIGNAL('clicked()'), self.start)

    def browseFile(self):
        self.input_file_edit.setText(QFileDialog.getOpenFileName())

    def start(self):
        filename = str(self.input_file_edit.text())
        item_count = int(self.line_count_edit.text())
        window_size = int(self.window_size_spin.text())
        prune_threshold = int(self.threshold_spin.text())
        per_ip = int(self.per_ip_spin.text())
        per_session = int(self.per_session_spin.text())
        generate_graph = self.generate_graph_check.isChecked()
        complete_chain = self.complete_chain_check.isChecked()

        #params = (filename, item_count, window_size, prune_threshold, per_ip, per_session, generate_graph, complete_chain)
        #self.app = ZarganApp(*params)
        self.app = ZarganApp(filename=filename, item_count=item_count, window_size=window_size,
                             prune_threshold=prune_threshold, per_ip=per_ip, per_session=per_session,
                             generate_graph=generate_graph, complete_chain=complete_chain)

        self.computation = Process(target=self.app.run, args=())
        self.computation.start()

    def stop(self):
        logger.info("Terminating the computation...")
        self.computation.terminate()

    def generate_graph(self):
        self.app.generate_graph()
        self.app.write_graph()

    def showStatusMessage(self, message):
        self.statusBar().showMessage(message)
示例#2
0
class CreerSuite(MyMiniFrame):
    def __init__(self, parent):
        MyMiniFrame.__init__(self, parent, u"Représenter une suite")
        ##self.SetExtraStyle(wx.WS_EX_BLOCK_EVENTS )
        self.parent = parent
        self._param_ = self.parent._param_
        ##p = self.panel = QWidget(self)

        self.sizer = sizer = QVBoxLayout()
        sizer.addWidget(QLabel(u"Choisissez le mode de génération de la suite :"))
        self.mode = QComboBox()
        self.mode.addItems([u"u(n+1)=f(u(n))", u"u(n)=f(n)"])
        self.mode.setCurrentIndex(0)
        self.mode.currentIndexChanged.connect(self.EvtChoixMode)
        sizer.addWidget(self.mode)

        f = QHBoxLayout()
        f.addWidget(QLabel(u"Choisissez la fonction f :"))
        self.fonction = QComboBox()
        self.fonction.addItems(["Y" + str(i+1) for i in xrange(self.parent.nombre_courbes)])
        self.fonction.setCurrentIndex(0)
        self.fonction.currentIndexChanged.connect(self.EvtChoixFonction)
        f.addWidget(self.fonction)
        sizer.addLayout(f)

        start = QHBoxLayout()
        start.addWidget(QLabel(u"Commencer pour n ="))
        self.n0 = QSpinBox()
        self.n0.setRange(0, 1000000)
        self.n0.setValue(0)
        start.addWidget(self.n0)
        sizer.addLayout(start)

        terme = QHBoxLayout()
        self.label_init = QLabel(u"Terme initial :")
        terme.addWidget(self.label_init)
        self.un0 =  QLineEdit("1")
        self.un0.setMinimumWidth(100)
        terme.addWidget(self.un0)
        sizer.addLayout(terme)

        ligne = QFrame()
        ligne.setFrameStyle(QFrame.HLine|QFrame.Raised)
        ##sizer.addWidget(wx.StaticLine(p, -1, style=wx.LI_HORIZONTAL), 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)

        nbr = QHBoxLayout()
        nbr.addWidget(QLabel(u"Construire les"))
        self.termes = QSpinBox()
        self.termes.setRange(0, 100)
        self.termes.setValue(5)
        nbr.addWidget(self.termes)
        nbr.addWidget(QLabel(u"premiers termes."))
        sizer.addLayout(nbr)

        ligne = QFrame()
        ligne.setFrameStyle(QFrame.HLine|QFrame.Raised)

        sizer.addWidget(ligne)

        #p.SetSizer(sizer)
        boutons = QHBoxLayout()
        fermer = QPushButton(u"Fermer")
        boutons.addWidget(fermer)
        lancer = QPushButton(u"Créer")
        boutons.addWidget(lancer)
        fermer.clicked.connect(self.close)
        lancer.clicked.connect(self.Creer)
        sizer.addLayout(boutons)

        self.setLayout(sizer)
        ##self.SetClientSize(p.GetSize())





    def Creer(self):
##        self.parent.creer_feuille() # nouvelle feuille de travail
        # style des lignes :
        style, epaisseur = self._param_.style_suites_recurrentes
        kw_lignes = {"style": style, "epaisseur": epaisseur}

        # Les suites s'enregistrent auprès du module traceur
#        if not hasattr(self.parent, "suites"):
#            self.parent.suites = {}

        objets = self.parent.feuille_actuelle.objets
        i = self.fonction.currentIndex()
        nom_courbe = 'Cf' + str(i + 1)

        if objets.has_key(nom_courbe):
            courbe = objets[nom_courbe]
            fonction = courbe.fonction
        elif self.parent.boites[i].text():
            self.parent.valider(i=i)
            courbe = objets[nom_courbe]
            fonction = courbe.fonction
        else:
            # TODO: afficher un vrai message d'erreur
            raise KeyError,  "courbe inexistante : %s" %nom_courbe


        if self.mode.currentIndex() == 0: # cas des suites définies par récurrence
            u0 = eval_safe(self.un0.text())
            n0 = self.n0.value()

            d = objets.suiteDroited = Droite(Point(0, 0), Point(1, 1))
            d.label("$y\ =\ x$")
            M = objets.suitePointM0 = Point(u0, 0)
            M.label("$u_%s$" %(n0))
#            self.parent.suites["u"] = [d, M]

            for i in xrange(self.termes.value() - 1):
                # (Attention, ça ne va pas marcher pour les fonctions définies par morceau)
                u1 = fonction(u0)
                N = Point(u0, u1, visible=self._param_.afficher_points_de_construction)
                N.etiquette.visible = False
                s = Segment(M, N, **kw_lignes)
                P = Point(0, u1)
                P.label("$u_%s$" %(i + n0 + 1))
                t = Segment(N, P, **kw_lignes)
                Q = Point(u1, u1, visible = self._param_.afficher_points_de_construction)
                Q.etiquette.visible = False
                r = Segment(P, Q, **kw_lignes)
                M = Point(u1, 0)
                M.label("$u_%s$" %(i + n0 + 1))
                #self.parent.suites[u"u"].append([M, N, P, s, t])
                setattr(objets, "SuitePointN" + str(i), N)
                setattr(objets, "suitePointP" + str(i), P)
                setattr(objets, "suitePointQ" + str(i), Q)
                setattr(objets, "suiteSegments" + str(i), s)
                setattr(objets, "suiteSegmentt" + str(i), t)
                setattr(objets, "suiteSegmentr" + str(i), r)
                setattr(objets, "suitePointM" + str(i + 1), M)
                a = Segment(Q, M, **kw_lignes)
                setattr(objets, "suiteSegmenta" + str(i), a)
                u0 = u1
            self.parent.canvas.zoom_auto()

        else:   # suites définies explicitement
            n0 = self.n0.text()
#            self.parent.suites[u"u"] = []
            for i in xrange(n0, n0 + self.termes.text()):
                yi = fonction(i)
                M = Point(i, 0)
                M.label(str(i))
                N = Point(i, yi)
                N.etiquette.visible = False
                P = Point(0, yi)
                P.label("$u_%s$" %i)
                s = Segment(M, N, **kw_lignes)
                t = Segment(N, P, **kw_lignes)
                setattr(objets, "suitePointM" + str(i), M)
                setattr(objets, "suitePointN" + str(i), N)
                setattr(objets, "suitePointP" + str(i), P)
                setattr(objets, "suiteSegments" + str(i), s)
                setattr(objets, "suiteSegmentt" + str(i), t)
            self.parent.canvas.zoom_auto()



    def EvtChoixMode(self, index):
        if index == 1:
            self.label_init.hide()
            self.un0.hide()
        else:
            self.un0.show()
            self.label_init.show()


    def EvtChoixFonction(self, index):
        for i in xrange(self.parent.nombre_courbes):
            self.parent.boites[i].setChecked(i==index)
示例#3
0
class NumberBoxPanel(QWidget):
    def __init__(self, parent, resoution = "0.0000"):
        QWidget.__init__(self, parent)
        while not isinstance(parent, QDialog):
            parent = parent.parent()
        self.setObjectName("NumberBoxPanel" + str(len(parent.findChildren(NumberBoxPanel))))


        self.hLayoutBoxPanel = QHBoxLayout(self)
        self.hLayoutBoxPanel.setSpacing(0)
        self.hLayoutBoxPanel.setContentsMargins(0,0,0,0)
        self.hLayoutBoxPanel.setObjectName(("hLayoutBoxPanel"))
        self.frameBoxPanel = QFrame(self)
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.frameBoxPanel.sizePolicy().hasHeightForWidth())
        self.frameBoxPanel.setSizePolicy(sizePolicy)
        self.frameBoxPanel.setFrameShape(QFrame.NoFrame)
        self.frameBoxPanel.setFrameShadow(QFrame.Raised)
        self.frameBoxPanel.setObjectName(("frameBoxPanel"))
        self.hLayoutframeBoxPanel = QHBoxLayout(self.frameBoxPanel)
        self.hLayoutframeBoxPanel.setSpacing(0)
        self.hLayoutframeBoxPanel.setMargin(0)
        self.hLayoutframeBoxPanel.setObjectName(("hLayoutframeBoxPanel"))
        self.captionLabel = QLabel(self.frameBoxPanel)
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.captionLabel.sizePolicy().hasHeightForWidth())
        self.captionLabel.setSizePolicy(sizePolicy)
        self.captionLabel.setMinimumSize(QSize(200, 0))
        self.captionLabel.setMaximumSize(QSize(200, 16777215))
        font = QFont()
        font.setBold(False)
        font.setWeight(50)
        self.captionLabel.setFont(font)
        self.captionLabel.setObjectName(("captionLabel"))
        self.hLayoutframeBoxPanel.addWidget(self.captionLabel)

        if resoution != None:
            self.numberBox = QLineEdit(self.frameBoxPanel)
            self.numberBox.setEnabled(True)
            font = QFont()
            font.setBold(False)
            font.setWeight(50)
            self.numberBox.setFont(font)
            self.numberBox.setObjectName(self.objectName() + "_numberBox")
            self.numberBox.setText("0.0")
            self.numberBox.setMinimumWidth(70)
            self.numberBox.setMaximumWidth(70)
            self.hLayoutframeBoxPanel.addWidget(self.numberBox)
            self.numberBox.textChanged.connect(self.numberBoxChanged)
            self.numberBox.editingFinished.connect(self.numberBoxEditingFinished)
        else:
            self.numberBox = QSpinBox(self.frameBoxPanel)
            self.numberBox.setObjectName(self.objectName() + "_numberBox")
            self.numberBox.setMinimumWidth(70)
            self.numberBox.setMaximumWidth(70)
            self.numberBox.setMinimum(-100000000)
            self.numberBox.setMaximum(100000000)
            self.numberBox.setValue(1)
            self.hLayoutframeBoxPanel.addWidget(self.numberBox)

        self.imageButton = QPushButton(self.frameBoxPanel)

        self.imageButton.setText((""))
        icon = QIcon()
        icon.addPixmap(QPixmap(("Resource/convex_hull.png")), QIcon.Normal, QIcon.Off)
        self.imageButton.setIcon(icon)
        self.imageButton.setObjectName(("imageButton"))
        self.imageButton.setVisible(False)
        self.hLayoutframeBoxPanel.addWidget(self.imageButton)

        self.hLayoutBoxPanel.addWidget(self.frameBoxPanel)

        spacerItem = QSpacerItem(10,10,QSizePolicy.Expanding, QSizePolicy.Minimum)
        self.hLayoutBoxPanel.addItem(spacerItem)


        self.imageButton.clicked.connect(self.imageButtonClicked)

        self.numberResolution = resoution
        str0 = String.Number2String(6.6788, "0.0000")
        self.Value = 0
        self.captionUnits = ""
    def imageButtonClicked(self):
        self.emit(SIGNAL("Event_1"), self)
    def method_6(self, string_0):
        return "%s%s\t%f %s"%(string_0, self.Caption, self.Value, self.CaptionUnits);
    def numberBoxEditingFinished(self):
        self.emit(SIGNAL("editingFinished"), self)
    def numberBoxChanged(self):
        try:
            test = float(self.numberBox.text())
            self.emit(SIGNAL("Event_0"), self)
        except:
            if self.numberBox.text() == "" or self.numberBox.text() == "-" or self.numberBox.text() == "+":
                return
            str0 = "You must input the float type in \"%s\"."%(self.Caption)
            QMessageBox.warning(self, "Warning" , str0)
            self.numberBox.setText("0.0")

    def get_CaptionUnits(self):
        return self.captionUnits
    def set_CaptionUnits(self, captionUnits):
        self.captionUnits = captionUnits
    CaptionUnits = property(get_CaptionUnits, set_CaptionUnits, None, None)

    def get_Caption(self):
        caption = self.captionLabel.text()
        findIndex = caption.indexOf("(")
        if findIndex > 0:
            val = caption.left(findIndex)
            return val
        return caption
    def set_Caption(self, captionStr):
        if self.CaptionUnits != "" and self.CaptionUnits != None:
            self.captionLabel.setText(QString(captionStr + "(") + self.CaptionUnits + QString("):"))
        else:
            self.captionLabel.setText(captionStr + ":")
    Caption = property(get_Caption, set_Caption, None, None)

    def get_Visible(self):
        return self.isVisible()
    def set_Visible(self, bool):
        self.setVisible(bool)
    Visible = property(get_Visible, set_Visible, None, None)

    def get_Value(self):
        try:
            if self.numberResolution != None:
                return float(self.numberBox.text())
            else:
                return self.numberBox.value()
        except:
            return 0.0

    def set_Value(self, valueFloat):
        if self.numberResolution != None:
            if valueFloat == None or valueFloat == "":
                rStr = String.Number2String(0, self.numberResolution)
                self.numberBox.setText(rStr)
                return
            try:
                test = float(valueFloat)
                rStr = String.Number2String(test, self.numberResolution)
                self.numberBox.setText(rStr)
            except:
                str0 = "You must put the float type in \"%s\"."%(self.Caption)
                QMessageBox.warning(self, "Warning" , str0)
                rStr = String.Number2String(0, self.numberResolution)
                self.numberBox.setText(rStr)
        else:
            try:
                test = int(valueFloat)
                self.numberBox.setValue(test)
            except:
                str0 = "You must put the float type in \"%s\"."%(self.Caption)
                QMessageBox.warning(self, "Warning" , str0)
                self.numberBox.setValue(0)
    Value = property(get_Value, set_Value, None, None)

    # def get_IsEmpty(self):
    #     return self.numberBox.text() == "" or self.numberBox.text() == None
    # IsEmpty = property(get_IsEmpty, None, None, None)

    def get_ReadOnly(self):
        return self.numberBox.isReadOnly()
    def set_ReadOnly(self, bool):
        self.numberBox.setReadOnly(bool)
    ReadOnly = property(get_ReadOnly, set_ReadOnly, None, None)

    def set_LabelWidth(self, width):
        self.captionLabel.setMinimumSize(QSize(width, 0))
        self.captionLabel.setMaximumSize(QSize(width, 16777215))
    LabelWidth = property(None, set_LabelWidth, None, None)

    def set_Width(self, width):
        self.numberBox.setMinimumSize(QSize(width, 0))
        self.numberBox.setMaximumSize(QSize(width, 16777215))
    Width = property(None, set_Width, None, None)

    def get_Enabled(self):
        return self.isEnabled()
    def set_Enabled(self, bool):
        self.setEnabled(bool)
    Enabled = property(get_Enabled, set_Enabled, None, None)

    def set_Button(self, imageName):
        if imageName == None or imageName == "":
            self.imageButton.setVisible(False)
            return
        icon = QIcon()
        icon.addPixmap(QPixmap(("Resource/" + imageName)), QIcon.Normal, QIcon.Off)
        self.imageButton.setIcon(icon)
        self.imageButton.setVisible(True)
    Button = property(None, set_Button, None, None)