[python-nl] Kan iemand mij helpen met Python?

B. Bell isdan24 at hotmail.com
Fri Feb 21 09:13:58 CET 2014


Goedemorgen Chris,
 
 
Bedankt voor het reageren op mijn bericht.
 
 
Om eerlijk te zijn ben ik redelijk nieuw met Python programmering, sterker nog, het is de eerste keer dat ik het echt gebruik.
 
Het is bijna onmogelijk om hulp te krijgen en ik probeer echt van alles, je reactie is al een lichtpunt!
 
Hieronder staat de complete code, is het misschien mogelijk voor je om binnen de code aan te geven welke wijzigingen ik waar moet aanbrengen of wat ik
 
evt kan weglaten? Ik ben al meer dan een maand bezig hiermee en kom er echt niet uit. Ik zal je er eeuwig dankbaar voor zijn!
 
 
import sysfrom PyQt4 import QtGui, QtCoreimport signal #to close the windows with ctrl+Cimport serial import matplotlibwidgetimport filtreimport timeimport math  class MainWindows(QtGui.QMainWindow): # Global variables    continu = True     def __init__(self):                super(MainWindows, self).__init__()        self.initGUI()            ## init all the GUI windows    #          def initGUI(self):                ###        ##define filtre        self.filtre = filtre.filtreIIR2(0.29289322, 0.58578644, 0.29289322, 0, 0.17157288)                ##        ## define the GUI        zoneCentrale = QtGui.QWidget()         windowsIcon = QtGui.QIcon("esiLogo.PNG")        self.setWindowIcon(windowsIcon)                self.greenPalette = QtGui.QPalette()        self.greenPalette.setColor(QtGui.QPalette.Button, QtGui.QColor(0, 255, 0, 127))         self.redPalette = QtGui.QPalette()        self.redPalette.setColor(QtGui.QPalette.Button, QtGui.QColor(255, 0, 0, 127))         ##        ##Boxs to port series connect        gridbox_com_connection = QtGui.QGridLayout()        name_com_connection = QtGui.QLabel("Ultrasonic board connection:")        name_numero_com = QtGui.QLabel("Serial COM Port connection")        name_baud_rate = QtGui.QLabel("Baud Rate")                self.box_numero_com = QtGui.QComboBox()        self.box_baude_rate = QtGui.QComboBox()                liste_baud_rate = ["110", "150", "300", "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200", "230400", "460800", "921600"]                for baude_rate in liste_baud_rate:            self.box_baude_rate.addItem(baude_rate)         liste_port_com = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "28"]                for port_com in liste_port_com:            self.box_numero_com.addItem(port_com)         self.liste_com = [self.box_numero_com, self.box_baude_rate]         self.btn_connect = QtGui.QPushButton("Connect")                gridbox_com_connection.addWidget(name_com_connection, 0, 0, 1, 2)        gridbox_com_connection.addWidget(name_numero_com, 1,0)        gridbox_com_connection.addWidget(self.box_numero_com, 1, 1)        gridbox_com_connection.addWidget(name_baud_rate, 2, 0)        gridbox_com_connection.addWidget(self.box_baude_rate, 2, 1)        gridbox_com_connection.addWidget(self.btn_connect, 3, 1)                self.com_serie = serial.Serial()         self.connect(self.btn_connect, QtCore.SIGNAL("clicked()"), self.comConnect)         ##        ##Boxs to send pulses        gridbox_send_pulsos = QtGui.QGridLayout()        name_pulsos = QtGui.QLabel("Ultrasonic Burst Emission:")        name_frequencia = QtGui.QLabel("Frequency (in Hz)")        name_num_pulsos = QtGui.QLabel("Number of pulses")        #name_duty_cycle = QtGui.QLabel("Duty_cycle")         self.box_frequencia = QtGui.QDoubleSpinBox()        self.box_num_pulsos = QtGui.QDoubleSpinBox()        #self.box_duty_cycle = QtGui.QDoubleSpinBox()         self.liste_pulsos = [self.box_frequencia, self.box_num_pulsos] #, self.box_duty_cycle]        for spinBox in self.liste_pulsos:            spinBox.setSingleStep(1)            spinBox.setRange(0,500000)            spinBox.setDecimals(0)         self.btn_send_pulsos = QtGui.QPushButton("Send Ultrasonic Burst Configuration")         gridbox_send_pulsos.addWidget(name_pulsos, 0, 0, 1, 2)        gridbox_send_pulsos.addWidget(name_frequencia, 1, 0)        gridbox_send_pulsos.addWidget(self.box_frequencia, 1, 1)        gridbox_send_pulsos.addWidget(name_num_pulsos, 2, 0)        gridbox_send_pulsos.addWidget(self.box_num_pulsos, 2, 1)        #gridbox_send_pulsos.addWidget(name_duty_cycle, 3, 0)        #gridbox_send_pulsos.addWidget(self.box_duty_cycle, 3, 1)        gridbox_send_pulsos.addWidget(self.btn_send_pulsos, 4, 1)                self.connect(self.btn_send_pulsos, QtCore.SIGNAL("clicked()"), self.sendPulsos)         ##        ##Box to send acquisition parameter        gridbox_send_acquisition = QtGui.QGridLayout()        name_acquisition = QtGui.QLabel("Acquisition Parameter Configuration :")        name_number_point = QtGui.QLabel("Number of Points at 2,4MHz Sampling freq.")        name_time_before_acquisition = QtGui.QLabel("Delay Time Before Acquisition (in ms)")         self.box_number_point = QtGui.QDoubleSpinBox()        self.box_time_before_acquisition = QtGui.QDoubleSpinBox()         self.liste_acquisition = [self.box_number_point, self.box_time_before_acquisition]        for spinBox in self.liste_acquisition:            spinBox.setSingleStep(1)            spinBox.setRange(0,8000)            spinBox.setDecimals(0)         self.btn_send_acquisition = QtGui.QPushButton("Send Acquisition Parameter Configuration")         gridbox_send_acquisition.addWidget(name_acquisition, 0, 0, 1, 2)        gridbox_send_acquisition.addWidget(name_number_point, 1, 0)        gridbox_send_acquisition.addWidget(self.box_number_point, 1, 1)        gridbox_send_acquisition.addWidget(name_time_before_acquisition, 2, 0)        gridbox_send_acquisition.addWidget(self.box_time_before_acquisition, 2, 1)        gridbox_send_acquisition.addWidget(self.btn_send_acquisition, 3, 1)                self.connect(self.btn_send_acquisition, QtCore.SIGNAL("clicked()"), self.sendAcquisitionParameter)         ##        ##Box to send filter parameter        gridbox_send_filter = QtGui.QGridLayout()        name_filter = QtGui.QLabel("Filter Parameters :")        name_b00 = QtGui.QLabel("b00")        name_b01 = QtGui.QLabel("b01")        name_b02 = QtGui.QLabel("b02")         self.box_b00 = QtGui.QDoubleSpinBox()        self.box_b01 = QtGui.QDoubleSpinBox()        self.box_b02 = QtGui.QDoubleSpinBox()         self.liste_filter = [self.box_b00, self.box_b01, self.box_b02]        for spinBox in self.liste_filter:            spinBox.setSingleStep(0.0001)            spinBox.setRange(0,500)            spinBox.setDecimals(4)            # Este botón ahora tiene sentido?? No, habría que hacer el cálculo con las varibles b00, b01 y b02. El filtrado se hace en el PC y no en el uC.        self.btn_send_filter = QtGui.QPushButton("Send Filter Parameters")                gridbox_send_filter.addWidget(name_filter, 0, 0, 1, 2)        gridbox_send_filter.addWidget(name_b00, 1, 0)        gridbox_send_filter.addWidget(self.box_b00, 1, 1)        gridbox_send_filter.addWidget(name_b01, 2, 0)        gridbox_send_filter.addWidget(self.box_b01, 2, 1)        gridbox_send_filter.addWidget(name_b02, 3, 0)        gridbox_send_filter.addWidget(self.box_b02, 3, 1)        gridbox_send_filter.addWidget(self.btn_send_filter, 4, 1)                self.connect(self.btn_send_filter, QtCore.SIGNAL("clicked()"), self.sendFilterParameter)         ##        ##button to start a test               name_start_test = QtGui.QLabel("Ultrasonic Measurements :")                self.manual_mode = QtGui.QRadioButton("Manual")        self.automatic_mode = QtGui.QRadioButton("Automatic")                self.box_burst_time = QtGui.QDoubleSpinBox()                self.box_burst_time.setSingleStep(3)        self.box_burst_time.setRange(1,60)        self.box_burst_time.setDecimals(0)                gridbox_start_acquisition = QtGui.QGridLayout()        self.btn_start_acquisition = QtGui.QPushButton("Start Ultrasonic Measurement")        self.btn_stop_acquisition = QtGui.QPushButton("Stop Ultrasonic Measurement")                gridbox_start_acquisition.addWidget(name_start_test, 0, 0)        gridbox_start_acquisition.addWidget(self.manual_mode, 1, 0)        gridbox_start_acquisition.addWidget(self.automatic_mode, 2, 0)        gridbox_start_acquisition.addWidget(self.box_burst_time, 3, 1)        gridbox_start_acquisition.addWidget(self.btn_start_acquisition, 4, 0, 1, 2)        gridbox_start_acquisition.addWidget(self.btn_stop_acquisition, 5, 0, 1, 2)                self.connect(self.btn_start_acquisition, QtCore.SIGNAL("clicked()"), self.startAcquisition)        self.connect(self.btn_stop_acquisition, QtCore.SIGNAL("clicked()"), self.stopAcquisition)                ##        ##init graph        gridbox_graph = QtGui.QGridLayout()                name_graph = QtGui.QLabel("Result :")                self.figRaw = matplotlibwidget.MatplotlibWidget(parent=self, title="Raw data", xlabel="Time", ylabel="Voltage")        self.figFilter = matplotlibwidget.MatplotlibWidget(parent=self, title="Filtered data", xlabel="Time",ylabel="Voltage")                gridbox_graph.addWidget(self.figRaw, 1, 0)        gridbox_graph.addWidget(self.figFilter, 1, 1)        gridbox_graph.addWidget(name_graph, 0, 0, 1, 2)                self.catch = False                self.figRaw.mpl_connect('scroll_event', self.OnScrollEvt)        self.figFilter.mpl_connect('scroll_event', self.OnScrollEvt)                self.figRaw.mpl_connect('button_press_event', self.OnPress)        self.figRaw.mpl_connect('button_release_event', self.OnRelease)        self.figRaw.mpl_connect('motion_notify_event', self.OnMotion)                self.figFilter.mpl_connect('button_press_event', self.OnPress)        self.figFilter.mpl_connect('button_release_event', self.OnRelease)        self.figFilter.mpl_connect('motion_notify_event', self.OnMotion)                ##        ##initialise the color of each button                self.btn_connect.setPalette(self.greenPalette)        self.btn_connect.setAutoFillBackground(True)        self.btn_connect.setFlat(True)        self.btn_send_pulsos.setPalette(self.redPalette)        self.btn_send_pulsos.setAutoFillBackground(True)        self.btn_send_pulsos.setFlat(True)        self.btn_send_filter.setPalette(self.redPalette)        self.btn_send_filter.setAutoFillBackground(True)        self.btn_send_filter.setFlat(True)        self.btn_send_acquisition.setPalette(self.redPalette)        self.btn_send_acquisition.setAutoFillBackground(True)        self.btn_send_acquisition.setFlat(True)        self.btn_send_pulsos.setEnabled(False)        self.btn_send_filter.setEnabled(False)        self.btn_send_acquisition.setEnabled(False)        self.btn_start_acquisition.setEnabled(False)        self.btn_stop_acquisition.setEnabled(False)                ##        ##save file                name_save = QtGui.QLabel("Save Measurement :")                gridbox_save_file = QtGui.QGridLayout()                self.btn_save_file = QtGui.QPushButton("Save")        self.btn_browse = QtGui.QPushButton("Browse")                self.connect(self.btn_save_file, QtCore.SIGNAL("clicked()"), self.saveFile)        self.connect(self.btn_browse, QtCore.SIGNAL("clicked()"), self.Browse)                self.path = QtGui.QLineEdit()                gridbox_save_file.addWidget(name_save, 0, 0, 1, 2)        gridbox_save_file.addWidget(self.path, 1, 0, 1, 2)        gridbox_save_file.addWidget(self.btn_browse, 2, 0)        gridbox_save_file.addWidget(self.btn_save_file, 2, 1)                ##        ##Window        self.setGeometry(100, 100, 1000, 600)        self.setWindowTitle('Ultrasonic Prototipe System')        self.setCentralWidget(zoneCentrale)                self.vline = QtGui.QFrame()        self.vline.setFrameShape(QtGui.QFrame.VLine)        self.vline.setFrameShadow(QtGui.QFrame.Sunken)                self.hline = QtGui.QFrame()        self.hline.setFrameShape(QtGui.QFrame.HLine)        self.hline.setFrameShadow(QtGui.QFrame.Sunken)         self.hline2 = QtGui.QFrame()        self.hline2.setFrameShape(QtGui.QFrame.HLine)        self.hline2.setFrameShadow(QtGui.QFrame.Sunken)                self.hline4 = QtGui.QFrame()        self.hline4.setFrameShape(QtGui.QFrame.HLine)        self.hline4.setFrameShadow(QtGui.QFrame.Sunken)                self.hline5 = QtGui.QFrame()        self.hline5.setFrameShape(QtGui.QFrame.HLine)        self.hline5.setFrameShadow(QtGui.QFrame.Sunken)                gridLayout = QtGui.QGridLayout()        gridLayout2 = QtGui.QGridLayout()                gridLayout.addLayout(gridbox_com_connection, 0, 2, 3, 1)        gridLayout.addWidget(self.vline, 0, 1, 5, 1)        gridLayout.addLayout(gridbox_send_pulsos, 0, 0)        gridLayout.addWidget(self.hline, 1, 0)        gridLayout.addLayout(gridbox_send_acquisition, 2, 0)        gridLayout.addWidget(self.hline2, 3, 0)        gridLayout.addLayout(gridbox_send_filter, 4, 0)        gridLayout.addWidget(self.hline4, 3, 2)        gridLayout.addLayout(gridbox_start_acquisition, 4, 2)                gridLayout2.addLayout(gridbox_graph, 0, 0)        gridLayout2.addLayout(gridbox_save_file, 2, 0)        gridLayout2.addWidget(self.hline5, 1, 0)                wid1 = QtGui.QWidget()        wid2 = QtGui.QWidget()                wid1.setLayout(gridLayout)        wid2.setLayout(gridLayout2)                self.fenetre = QtGui.QTabWidget(zoneCentrale)        self.fenetre.setGeometry(0, 0, 1000, 600)        self.fenetre.addTab(wid1, "Configuration")        self.fenetre.addTab(wid2, "Graph Analysis")         self.show()     ## Connect the application to the port serial given by the user    #     def comConnect(self):        portConnection, success = self.box_numero_com.currentText().toInt()        baudeRate, success2 = self.box_baude_rate.currentText().toInt()         if success != True and success2 != True:            QtGui.QMessageBox.warning(self, "Warning", "fail to convert the number from the box", QtGui.QMessageBox.Ok)        else:            if self.com_serie.isOpen() == True: #if there is alredy a connection, we close it                self.com_serie.close()                        self.com_serie.baudrate = baudeRate            self.com_serie.port = portConnection - 1            self.com_serie.timeout = 2 #we put two seconde of timeout                        try:                self.com_serie.open()                print "Success to open connection"                                 ## we put all the button in green to show that you can use it                self.btn_connect.setPalette(self.greenPalette)                self.btn_connect.setAutoFillBackground(True)                self.btn_connect.setFlat(True)                self.btn_send_pulsos.setPalette(self.greenPalette)                self.btn_send_pulsos.setAutoFillBackground(True)                self.btn_send_pulsos.setFlat(True)                self.btn_send_filter.setPalette(self.greenPalette)                self.btn_send_filter.setAutoFillBackground(True)                self.btn_send_filter.setFlat(True)                self.btn_send_acquisition.setPalette(self.greenPalette)                self.btn_send_acquisition.setAutoFillBackground(True)                self.btn_send_acquisition.setFlat(True)                self.btn_send_pulsos.setEnabled(True)                self.btn_send_filter.setEnabled(True)                self.btn_send_acquisition.setEnabled(True)                self.btn_start_acquisition.setEnabled(True)                            except:                QtGui.QMessageBox.warning(self, "Warning", "fail to open the connection", QtGui.QMessageBox.Ok)                self.btn_send_pulsos.setPalette(self.redPalette)                self.btn_send_pulsos.setAutoFillBackground(True)                self.btn_send_pulsos.setFlat(True)                self.btn_send_filter.setPalette(self.redPalette)                self.btn_send_filter.setAutoFillBackground(True)                self.btn_send_filter.setFlat(True)                self.btn_send_acquisition.setPalette(self.redPalette)                self.btn_send_acquisition.setAutoFillBackground(True)                self.btn_send_acquisition.setFlat(True)                self.btn_send_pulsos.setEnabled(False)                self.btn_send_filter.setEnabled(False)                self.btn_send_acquisition.setEnabled(False)                self.btn_start_acquisition.setEnabled(False)     ## Send all the parameter for the pulses. nbPulse, frequency, duty_cycle    #    def sendPulsos(self):            if self.com_serie.isOpen() == True:                    self.btn_send_pulsos.setPalette(self.redPalette)            self.btn_send_pulsos.setAutoFillBackground(True)            self.btn_send_pulsos.setFlat(True)             message = str()                        listCharacter = ["a"] #to avoid that the list is empty            message = "#pulse_freq" + str(int(self.box_frequencia.value())) + "%"            self.com_serie.write(message)            while(listCharacter[len(listCharacter)-1] != '%'):                listCharacter.append(self.com_serie.read())            message = "".join(listCharacter)            message = message[message.find("#"):message.find("%") + 1]            print "recu " + message                        listCharacter = ["a"]#to avoid that the list is empty            message = "#pulse_num" + str(int(self.box_num_pulsos.value())) + "%"            self.com_serie.write(message)            while(listCharacter[len(listCharacter)-1] != '%'):                listCharacter.append(self.com_serie.read())            message = "".join(listCharacter)            message = message[message.find("#"):message.find("%") + 1]            print "recu " + message                        # listCharacter = ["a"]#to avoid that the list is empty            # message = "#pulse_duty_cycle" + str(int(self.box_duty_cycle.value())) + "%"            # self.com_serie.write(message)            # while(listCharacter[len(listCharacter)-1] != '%'):                # listCharacter.append(self.com_serie.read())            # message = "".join(listCharacter)            # message = message[message.find("#"):message.find("%") + 1]            # print "recu " + message                        self.btn_send_pulsos.setPalette(self.greenPalette)            self.btn_send_pulsos.setAutoFillBackground(True)            self.btn_send_pulsos.setFlat(True)                else:                    QtGui.QMessageBox.warning(self, "Warning", "The port serial have not been open", QtGui.QMessageBox.Ok)             ## Send all the parameter for the Acquisition, nbPoint and the time before making acquisition    #    def sendAcquisitionParameter(self):            if self.com_serie.isOpen() == True:                    self.btn_send_acquisition.setPalette(self.redPalette)            self.btn_send_acquisition.setAutoFillBackground(True)            self.btn_send_acquisition.setFlat(True)                        message = str()                        listCharacter = ["a"] #to avoid that the list is empty            message = "#adq_n_points" + str(int(self.box_number_point.value())) + "%"            self.com_serie.write(message)            while(listCharacter[len(listCharacter)-1] != '%'):                listCharacter.append(self.com_serie.read())            message = "".join(listCharacter)            message = message[message.find("#"):message.find("%") + 1]            print "recu " + message                        listCharacter = ["a"] #to avoid that the list is empty            message = "#adq_delay_time" + str(int(self.box_time_before_acquisition.value())) + "%"            self.com_serie.write(message)            while(listCharacter[len(listCharacter)-1] != '%'):                listCharacter.append(self.com_serie.read())            message = "".join(listCharacter)            message = message[message.find("#"):message.find("%") + 1]            print "recu " + message                        self.btn_send_acquisition.setPalette(self.greenPalette)            self.btn_send_acquisition.setAutoFillBackground(True)            self.btn_send_acquisition.setFlat(True)         else:                     QtGui.QMessageBox.warning(self, "Warning", "The port serial have not been open", QtGui.QMessageBox.Ok)          ## Send all the parameter for the filter    #     def sendFilterParameter(self):            if self.com_serie.isOpen() == True:                    self.btn_send_filter.setPalette(self.redPalette)            self.btn_send_filter.setAutoFillBackground(True)            self.btn_send_filter.setFlat(True)                        self.btn_send_filter.setPalette(self.greenPalette)            self.btn_send_filter.setAutoFillBackground(True)            self.btn_send_filter.setFlat(True)        else:                        QtGui.QMessageBox.warning(self, "Warning", "The port serial have not been open", QtGui.QMessageBox.Ok)                ## save the data in the file given by the Line Edit widget    #            def saveFile(self):            filename = self.path.text()                file = QtCore.QFile(filename)        file.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text)                ################        ### how do we store them        #################                for data in self.data:            file.write(str(data))            file.write('\n')         file.write("filtered data\n")                for data in self.datafilter:            file.write(str(data))            file.write('\n')         file.close()            ## Allow the user to give a path where to store the data. This path is then display in the line edit widget    #            def Browse(self):                filename = QtGui.QFileDialog.getSaveFileName(self, "Save file", "", ".txt")        self.path.setText(filename)     ## start the aquisition    #        def startAcquisition(self):                if self.com_serie.isOpen() == True:                    message = str()            message_data = str()                          ##            ## we send here the configuration to the system            if self.automatic_mode.isChecked() == True:                            timeToWait = self.box_burst_time.value()                self.btn_stop_acquisition.setEnabled(True)    #Activamos el botón de stop de adquisición en modo auto                                                print "pulse_burst_period"                listCharacter = ["a"] #to avoid that the list is empty                message = "#pulse_burst_period" + str(int(timeToWait)) + "%"                self.com_serie.write(message)                while(listCharacter[len(listCharacter)-1] != '%'):                    listCharacter.append(self.com_serie.read())                message = "".join(listCharacter)                message = message[message.find("#"):message.find("%") + 1]                print "recu " + message                                               print "auto"                listCharacter = ["a"] #to avoid that the list is empty                message = "#mode_auto%"                self.com_serie.write(message)                while(listCharacter[len(listCharacter)-1] != '%'):                    listCharacter.append(self.com_serie.read())                message = "".join(listCharacter)                message = message[message.find("#"):message.find("%") + 1]                print "recu " + message                                else:                print "manu"                #timeToWait = 1 #0                listCharacter = ["a"] #to avoid that the list is empty                message = "#mode_manual%"                self.com_serie.write(message)                while(listCharacter[len(listCharacter)-1] != '%'):                    listCharacter.append(self.com_serie.read())                message = "".join(listCharacter)                message = message[message.find("#"):message.find("%") + 1]                print "recu " + message                            ## now we get the data            message = "#start%"            self.com_serie.write(message)            time.sleep(1)            listCharacter = ["a"] #to avoid that the list is empty            while(listCharacter[len(listCharacter)-1] != '%'):                listCharacter.append(self.com_serie.read())            message = "".join(listCharacter)            message = message[message.find("#"):message.find("%") + 1]            print "recu " + message                                            #############################            ## Get the data            #############################            self.get_data()                           #############################            ## Plot them            #############################              print "Ploting..."            self.update_plot()                                     def automatic_get_data(self):         print "auto get data!"        self.get_data()                self.update_plot()        def get_data(self):        self.dataStr = []        self.data = []        self.datafilter = []                        message_data = self.getMessageCom()                           print "Estos son los datos  " + message_data  #debug        message_data = message_data [:len(message_data)-1]           self.dataStr = message_data.split(";")                        for data in self.dataStr:            data = int(data)            data = (data * 3300.0) / 4095.0            print data   #debug            self.data.append(data)            self.datafilter.append(self.filtre.newInputFilter(data))                        def update_plot(self):                self.fenetre.setCurrentIndex(1)   #Cambia de pestaña y muestra gráfica                        if self.automatic_mode.isChecked() == False:            print "Manual mode"            self.figRaw.axes.clear()            self.figRaw.axes.plot(self.data)            self.figRaw.axes.set_title("Raw data")            self.figRaw.axes.set_xlabel("Time")            self.figRaw.axes.set_ylabel("Voltage")            self.figRaw.draw()                    self.figFilter.axes.clear()            self.figFilter.axes.plot(self.datafilter)            self.figFilter.axes.set_title("Filtered data")            self.figFilter.axes.set_xlabel("Time")            self.figFilter.axes.set_ylabel("Voltage")            self.figFilter.draw()        else:            print "Automatic mode"            self.figRaw.axes.plot(self.data)            self.figRaw.draw()                        self.figFilter.axes.plot(self.datafilter)            self.figFilter.draw()                        self.automatic_get_data()  # imprimir de forma contínua                 #hl.set_xdata(numpy.append(hl.get_xdata(), new_data))        #hl.set_ydata(numpy.append(hl.get_ydata(), new_data))        #plt.draw()        def stopAcquisition(self):        message = "#stop%"        self.com_serie.write(message)        time.sleep(1)        listCharacter = ["a"] #to avoid that the list is empty        while(listCharacter[len(listCharacter)-1] != '%'):            listCharacter.append(self.com_serie.read())        message = "".join(listCharacter)        message = message[message.find("#"):message.find("%") + 1]        print "recu " + message                        def OnScrollEvt(self, event):            xmin, xmax = event.canvas.axes.get_xlim()        xmoy = (xmax + xmin)/2.0        event.canvas.axes.set_xlim(xmoy - (xmoy - xmin)*math.pow(1.1, event.step), (xmax - xmoy)*math.pow(1.1, event.step) + xmoy)        event.canvas.draw()     def OnPress(self, event):            self.catch = True        self.x0 = event.x        self.y0 = event.y        def OnMotion(self, event):            if self.catch == True:            ymin, ymax = event.canvas.axes.get_ylim()            xmin, xmax = event.canvas.axes.get_xlim()            dx = (event.x - float(self.x0))*(xmax-xmin)/100.0            dy = (event.y - float(self.y0))*(ymax-ymin)/100.0            self.x0 = event.x            self.y0 = event.y            event.canvas.axes.set_ylim(ymin - dy, ymax - dy)            event.canvas.axes.set_xlim(xmin - dx, xmax - dx)            event.canvas.draw()        def OnRelease(self, event):            self.catch = False        def getMessageCom(self):        listCharacter = ["a"] #to avoid that the list is empty                while(listCharacter[len(listCharacter)-1] != '%'):            listCharacter.append(self.com_serie.read())        message = "".join(listCharacter)        message = message[message.find("#")+1:message.find("%")]       # print "mensaje: " + message #debug        return message    if __name__ == '__main__':     app = QtGui.QApplication(sys.argv)    signal.signal(signal.SIGINT, signal.SIG_DFL)    mainWindows = MainWindows()    sys.exit(app.exec_())
 Date: Tue, 18 Feb 2014 20:32:01 +0100
From: Chris.Wesseling op cwi.nl
To: python-nl op python.org
Subject: Re: [python-nl] Kan iemand mij helpen met Python?

On 2014-02-17T16:54:47+0100, B. Bell wrote:
> De probleemstelling is:
>  
> Een hardware apparaat geprogrameerd door mij volgt de instructies op
> van het computerprogramma dat gemaakt is met Python.Het wordt aan de
> computer verbonden en creëert een virtuele COM port via USB.
> De communicatie, configuratie en knoppen doen het goed, het probleem
> doet zich alleen voor  als ik de data wil uitbeelden die het hardware
> apparaatje zendt als ik deze in de "Automatic" modus zet en het
> apparaat elke seconde de data zendt en het computerprogramma
> vastloopt.
> Echter, als ik het in de handmatige modus zet, dan doet deze het wèl
> goed. De data worden uitgebeeld (random data). De handmatige modus
> maakt alleen lezingen als men op de knop "Start Ultrasonic
> Measurement" klikt. Als bijlagen zitten er 2 schermafbeeldingen bij,
> in de handmatige modus
> (OK) en de automatische (PC vastgelopen).
 
Heb je je logica al eens geprobeerd zonder GUI?
 
Je serial I/O is niet asynchroon en kan je Qt eventloop blokkeren,
waardoor het lijkt alsof je programma vastloopt, maar in werkelijkheid
alleen je GUI niet reageerd op je gebruikers input, omdat je programma
druk bezig is met je hardware apparaat.
 
 
-- 
Chris Wesseling
Centrum Wiskunde & Informatica (CWI)
https://www.cwi.nl/people/ccw

_______________________________________________
Python-nl mailing list
Python-nl op python.org
https://mail.python.org/mailman/listinfo/python-nl 		 	   		  
------------- volgend deel ------------
Een HTML-bijlage is gescrubt...
URL: <http://mail.python.org/pipermail/python-nl/attachments/20140221/2b7a6669/attachment-0001.html>


More information about the Python-nl mailing list