Beispiel #1
0
class MainWindow(QMainWindow, Ui_MainWindow):
    """
    Class documentation goes here.
    """
    def __init__(self, parent=None):
        """
        Constructor
        """
        QMainWindow.__init__(self, parent)
        self.setupUi(self)
        self.countBattle = 0
        self.timer = QTimer()
        self.tableWidget.horizontalHeader().setResizeMode(
            QtGui.QHeaderView.Stretch)
        self.tableWidget.hide()

    @pyqtSignature("")
    def on_pushButton_clicked(self):
        """
        Start the last battle
        """

        with open(os.getcwd() + "/.datas/lastArena", 'rb') as file:
            unpickler = pickle.Unpickler(file)
            dico = unpickler.load()
        file.close()

        self.setUpBattle(dico["width"], dico["height"], dico["botList"])

    def setUpBattle(self, width, height, botList):
        self.tableWidget.clearContents()
        self.tableWidget.hide()
        self.graphicsView.show()
        self.width = width
        self.height = height
        self.botList = botList
        self.statisticDico = {}
        for bot in botList:
            self.statisticDico[self.repres(bot)] = statistic()
        self.startBattle()

    def startBattle(self):

        try:
            self.disconnect(self.timer, SIGNAL("timeout()"),
                            self.scene.advance)
            del self.timer
            del self.scene
            del self.sceneMenu
        except:
            pass

        self.timer = QTimer()
        self.countBattle += 1
        self.sceneMenu = QGraphicsScene()
        self.graphicsView_2.setScene(self.sceneMenu)
        self.scene = Graph(self, self.width, self.height)
        self.graphicsView.setScene(self.scene)
        self.scene.AddRobots(self.botList)
        self.connect(self.timer, SIGNAL("timeout()"), self.scene.advance)
        self.timer.start((self.horizontalSlider.value()**2) / 100.0)
        self.resizeEvent()

    @pyqtSignature("int")
    def on_horizontalSlider_valueChanged(self, value):
        """
        Slot documentation goes here.
        """
        self.timer.setInterval((value**2) / 100.0)

    @pyqtSignature("")
    def on_actionNew_activated(self):
        """
        Battle Menu
        """
        self.battleMenu = Battle(self)
        self.battleMenu.show()

    @pyqtSignature("")
    def on_actionNew_2_activated(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        print("Not Implemented Yet")

    @pyqtSignature("")
    def on_actionOpen_activated(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        print("Not Implemented Yet")

    def resizeEvent(self, evt=None):
        try:
            self.graphicsView.fitInView(self.scene.sceneRect(), 4)
        except:
            pass

    def addRobotInfo(self, robot):
        self.sceneMenu.setSceneRect(0, 0, 170, 800)
        rb = RobotInfo()
        rb.pushButton.setText(str(robot))
        rb.progressBar.setValue(100)
        rb.robot = robot
        robot.info = rb
        robot.progressBar = rb.progressBar
        robot.icon = rb.toolButton
        robot.icon2 = rb.toolButton_2
        p = self.sceneMenu.addWidget(rb)
        l = (len(self.scene.aliveBots))
        self.sceneMenu.setSceneRect(0, 0, 170, l * 80)
        p.setPos(0, (l - 1) * 80)

    def chooseAction(self):
        if self.countBattle >= self.spinBox.value():
            "Menu Statistic"
            self.graphicsView.hide()
            self.tableWidget.show()
            self.tableWidget.setRowCount(len(self.statisticDico))
            i = 0
            for key, value in self.statisticDico.items():
                self.tableWidget.setItem(i, 0, QtGui.QTableWidgetItem(key))
                self.tableWidget.setItem(
                    i, 1, QtGui.QTableWidgetItem(str(value.first)))
                self.tableWidget.setItem(
                    i, 2, QtGui.QTableWidgetItem(str(value.second)))
                self.tableWidget.setItem(
                    i, 3, QtGui.QTableWidgetItem(str(value.third)))
                self.tableWidget.setItem(
                    i, 4, QtGui.QTableWidgetItem(str(value.points)))

                i += 1

            self.countBattle = 0
            self.timer.stop()
        else:
            self.startBattle()

    def repres(self, bot):
        repres = repr(bot).split(".")
        return repres[1].replace("'>", "")
class BKReversaScreen(QWidget):

    def __init__(self):
        super(BKReversaScreen,self).__init__()
        self.sensorActivo = 0
        self.inicializarUI()
        self.distancias=[]

    def inicializarUI(self):
        self.setWindowTitle("BlueKing::Reversa")
        self.setGeometry(0,0,320,240)
        self.setAutoFillBackground(True)

        #QGraphicsView/Scene
        self.view = QGraphicsView()
        self.view.setStyleSheet("border: 0px;margin: 0px;background-color: #000000;")

        self.scene = QGraphicsScene(0,0,320,240)
        self.view.setScene(self.scene)

        self.baseLayout = QVBoxLayout()
        self.baseLayout.setContentsMargins(0,0,0,0)
        self.baseLayout.addWidget(self.view)

        #Decoracion
        car_logo = QPixmap("imagenes/car_logo.png")
        car_logo_item = QGraphicsPixmapItem(car_logo)
        car_logo_item.setPos(5,5)
        self.scene.addItem(car_logo_item)

        self.distlabel = QLabel("-")
        self.distlabel.setGeometry(20, 20, 280, 200)
        self.distlabel.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
        self.distlabel.setStyleSheet("color: #00FFFF;font-size: 150px;background-color: transparent;")
        self.scene.addWidget(self.distlabel)

        self.measureLabel=QLabel("metros")
        self.measureLabel.setGeometry(10,190,300,30)
        self.measureLabel.setAlignment(QtCore.Qt.AlignRight |QtCore.Qt.AlignVCenter)
        self.measureLabel.setStyleSheet("color: #FFFF00;font-size: 30px; font-weight: bold; font-style: italic;background-color: transparent;")
        self.scene.addWidget(self.measureLabel)

        self.setLayout(self.baseLayout)

        transformacion = QTransform()
        transformacion.scale(1.0,-1.0)

        #self.view.setTransform(transformacion)

        self.show()

    def mousePressEvent(self, QMouseEvent):
        if self.sensorActivo == 0:
            # Iniciar sensores de Proximidad
            self.sensor1 = BKSensorProximidadDummie(0, 15, 14)
            self.sensor1.connect(self.sensor1, QtCore.SIGNAL('distancia_sensor'), self.mostrarMedida)
            self.sensor1.start()
            self.distancias[0] = 0.0
            self.sensor2 = BKSensorProximidadDummie(1, 23, 22)
            self.sensor2.connect(self.sensor2, QtCore.SIGNAL('distancia_sensor'), self.mostrarMedida)
            self.sensor2.start()
            self.distancias[1] = 0.0
            self.sensor3 = BKSensorProximidadDummie(2, 25, 24)
            self.sensor3.connect(self.sensor2, QtCore.SIGNAL('distancia_sensor'), self.mostrarMedida)
            self.sensor3.start()
            self.distancias[2] = 0.0
            self.sensorActivo = 1
        else:
            # Detener sensores
            self.sensor1.stop()
            #self.sensor2.stop()
            #self.sensor3.stop()

    def mostrarMedida(self, sensor, numero):
        # Calcular la menor distancia.
        self.distancias[sensor] = numero
        tnumero = 1000.0
        for n in range(len(self.distancias)):
            if self.distancias[n] < tnumero:
                tnumero = self.distancias[n]

        if tnumero == 1000.0:
            self.distlabel.setText("---")
        else:
            self.distlabel.setText(`numero`)
Beispiel #3
0
class BKHudScreen(QWidget):

    def __init__(self):
        super(BKHudScreen, self).__init__()
        self.bt_address=""
        self.inicializarUI()
        self.inicializarConfig()
        self.hilo = BKOBDLecturaDummie(self.bt_address)
        self.hilo.connect(self.hilo, self.hilo.senal, self.informacion_recibida)

    def inicializarConfig(self):
        # Leer configuraciones
        config = ConfigParser()
        config.read("config.ini")
        self.bt_address = config.get('Scanner','obd_interface')

    def inicializarUI(self):
        self.setWindowTitle("BlueKing HUD")
        self.setGeometry(0,0,320,240)
        self.setAutoFillBackground(True)

        self.view = QGraphicsView()
        self.view.setStyleSheet("border: 0px;margin: 0px;background-color: #000000;")

        self.scene = QGraphicsScene(0,0,320,240)
        self.view.setScene(self.scene)

        self.baseLayout = QVBoxLayout()
        self.baseLayout.setContentsMargins(0,0,0,0)
        self.baseLayout.addWidget(self.view)

        # Decoracion
        car_logo = QPixmap("imagenes/car_logo.png").scaled(32,32, QtCore.Qt.KeepAspectRatio)
        car_logo_item = QGraphicsPixmapItem(car_logo)
        car_logo_item.setPos(5,5)
        self.scene.addItem(car_logo_item)

        # Etiqueta km/h
        kmLabel = QLabel("Km/h")
        kmLabel.setGeometry(250,120, 70, 25)
        kmLabel.setStyleSheet("font-size: 25px; color: #C8FF00; background: transparent;text-decoration: italic")
        self.scene.addWidget(kmLabel)

        # Etiqueta RPM
        rpmSigLabel = QLabel("R.P.M.")
        rpmSigLabel.setGeometry(250, 152, 70, 25)
        rpmSigLabel.setStyleSheet("font-size: 25px; color: #C8FF00; background: transparent;text-decoration: italic")
        self.scene.addWidget(rpmSigLabel)

        # Icono Temperatura
        thermometro = QPixmap("imagenes/termometro_rojo.png").scaled(25,25, QtCore.Qt.KeepAspectRatio)
        thermometro_item = QGraphicsPixmapItem(thermometro)
        thermometro_item.setPos(290, 210)
        self.scene.addItem(thermometro_item)

        # Indicadores
        # Velocidad
        self.gaugeWidget = BKGauge()
        self.gaugeWidget.setGeometry(70,50,180,180)
        self.gaugeWidget.colorDial="#00FF00"
        self.gaugeWidget.maxValor=250
        self.scene.addWidget(self.gaugeWidget)

        self.velocidadLabel = QLabel("250")
        self.velocidadLabel.setGeometry(115,90,130,60)
        self.velocidadLabel.setAlignment(QtCore.Qt.AlignRight |QtCore.Qt.AlignVCenter)
        self.velocidadLabel.setStyleSheet("font-family: Blutter;font-size: 60px;color: #00FFFF; background: transparent; font-weight: bold; text-align: right;")
        self.scene.addWidget(self.velocidadLabel)

        # RPM
        self.rpmGaugeWidget = BKGauge()
        self.rpmGaugeWidget.setGeometry(60, 40, 200, 200)
        self.rpmGaugeWidget.maxValor=25000
        self.rpmGaugeWidget.anchoLinea = 20
        self.rpmGaugeWidget.colorDial = "#FF0000"
        self.scene.addWidget(self.rpmGaugeWidget)

        self.rpmLabel = QLabel("2658")
        self.rpmLabel.setGeometry(160, 150, 85, 30)
        self.rpmLabel.setAlignment(QtCore.Qt.AlignRight |QtCore.Qt.AlignVCenter)
        self.rpmLabel.setStyleSheet("font-family: Blutter;font-size: 30px;color: #FF0009; background-color: transparent;")
        self.scene.addWidget(self.rpmLabel)

        # Temperatura Motor
        self.engTempLabel = QLabel("180")
        self.engTempLabel.setGeometry(240, 210, 50, 25)
        self.engTempLabel.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
        self.engTempLabel.setStyleSheet("font-family: Blutter; font-size: 20px; color: #00FF00;background-color: transparent;")
        self.scene.addWidget(self.engTempLabel)

        self.setLayout(self.baseLayout)

        transformacion = QTransform()
        transformacion.scale(1.0,-1.0)

        self.view.setTransform(transformacion)

        self.show()

    def informacion_recibida(self, datos):

        # Velocidad
        if 'velocidad' in datos:
            self.velocidadLabel.setText(`datos['velocidad']`)
            self.gaugeWidget.setValor(datos['velocidad'])

        # RPM
        if 'rpm' in datos:
            self.rpmLabel.setText(`datos['rpm']`)
            self.rpmGaugeWidget.setValor(datos['rpm'])

        # Temperatura Motor
        if 'engTemp' in datos:
            self.engTempLabel.setText(`datos['engTemp']`)

    def mousePressEvent(self, QMouseEvent):
        if not self.hilo.corriendo:
            self.hilo.corriendo = True
            self.hilo.start()