Exemplo n.º 1
0
 def __build_lcd_number_widget(self):
     """Build a LCD Number widget."""
     lcdnumber = QLCDNumber(self)
     lcdnumber.setSegmentStyle(QLCDNumber.Filled)
     lcdnumber.setFixedHeight(40)
     lcdnumber.setFrameStyle(QFrame.NoFrame)
     return lcdnumber
Exemplo n.º 2
0
 def makeLCD(self,s):
     lcd = QLCDNumber()
     lcd.setSegmentStyle(2)
     lcd.setFrameStyle(QFrame.Plain)
     lcd.setSmallDecimalPoint(False)
     lcd.setStyleSheet("QLCDNumber { color: %s; background-color: %s;}"%(self.aw.lcdpaletteF[s],self.aw.lcdpaletteB[s]))
     return lcd
Exemplo n.º 3
0
class CountDownWidget(QWidget):
    def __init__(self, parent=None):
        # コンストラクタ
        QWidget.__init__(self, parent=parent)
        self.interval = 10

        self.setup_ui()

    def setup_ui(self):
        self.setAutoFillBackground(True)
        p = self.palette()
        p.setColor(self.backgroundRole(), QtCore.Qt.white)
        self.setPalette(p)

        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.timer = QtCore.QTimer(parent=self)
        self.timer.setInterval(self.interval)
        self.timer.timeout.connect(self.do_countdown)

        self.lcd_number = QLCDNumber(parent=self)
        self.lcd_number.setSizePolicy(QSizePolicy.Expanding,
                                      QSizePolicy.Expanding)
        self.lcd_number.setFrameStyle(QFrame.NoFrame)
        self.lcd_number.setSegmentStyle(QLCDNumber.Flat)
        self.lcd_number.setDigitCount(6)

        layout = QVBoxLayout()
        layout.addWidget(self.lcd_number)
        self.setLayout(layout)

        self.reset_count()

    def update_display(self):
        self.lcd_number.display("%6.2f" % (self.count / 100))
        self.lcd_number.update()

    def do_countdown(self):
        self.count -= 1
        self.update_display()
        if self.count <= 0:
            self.stop_countdown()

    def start_countdown(self):
        if self.count > 0:
            self.timer.start()

    def stop_countdown(self):
        self.timer.stop()

    def reset_count(self):
        self.count = 18000
        self.update_display()
Exemplo n.º 4
0
class CountDownWidget(QWidget):
    '''
    classdocs
    '''
    def __init__(self, parent=None):
        '''
        Constructor
        '''
        QWidget.__init__(self, parent=parent)
        self.interval = 10
        self.setup_ui()
    '''
    実際の初期化関数
    '''
    def setup_ui(self):
        self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.timer = QTimer(parent=self)
        self.timer.setInterval(self.interval)
        self.timer.timeout.connect(self.do_countdown)
        self.lcd_number = QLCDNumber(parent=self)
        self.lcd_number.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.lcd_number.setFrameStyle(QFrame.NoFrame)
        self.lcd_number.setSegmentStyle(QLCDNumber.Flat)
        self.lcd_number.setDigitCount(6)

        layout = QVBoxLayout()
        layout.addWidget(self.lcd_number)
        self.setLayout(layout)

        self.reset_count()

    def update_display(self):
        self.lcd_number.display("%6.2f" % (self.count / 100))
        self.lcd_number.update()
    def do_countdown(self):
        self.count -= 1
        self.update_display()
        if self.count <= 0:
            self.stopcountdown()
    def start_countdown(self):
        if self.count > 0:
            self.timer.start()
    def stop_countdown(self):
        self.timer.stop()
    def reset_count(self):
        self.count = 18000
        self.update_display()
Exemplo n.º 5
0
class Timer:
    initsec = 30
    gosec = 10

    def __init__(self, maingo, layout, turn):
        self.lcd = QLCDNumber()
        self.sec = self.initsec
        self.turn = turn
        self.updui()
        self.lcd.setFrameStyle(QFrame.NoFrame)
        self.maingo = maingo
        self.timer = QTimer(self.maingo.goui)
        self.timer.timeout.connect(self.count_time)
        self.timer.start(1000)
        layout.addWidget(self.lcd)

    def get_stime(self, seconds):
        min = seconds // 60
        sec = seconds % 60
        return '{:0>2}'.format(min) + ':' + '{:0>2}'.format(sec)

    def updui(self):
        self.lcd.display(self.get_stime(self.sec))

    def count_time(self):
        if not self.turn:
            return
        self.sec -= 1
        self.updui()
        #hack
        if self.sec == 0 and self.maingo.protor.step == self.turn:
            self.maingo.protor.surrender()
            self.timer.stop()

    def go(self):
        self.turn = not self.turn
        if self.turn:
            self.sec += self.gosec
Exemplo n.º 6
0
class MainWindow(QWidget):
    def __init__(self, ser, sio):
        super().__init__()

        # Setup the colour palette
        palette = self.palette()
        palette.setColor(QPalette.Window, QColor(40, 40, 40))
        palette.setColor(QPalette.WindowText, QColor(230, 230, 230))
        palette.setColor(QPalette.Base, QColor(252, 252, 252))
        palette.setColor(QPalette.AlternateBase, QColor(239, 240, 241))
        palette.setColor(QPalette.ToolTipBase, QColor(239, 240, 241))
        palette.setColor(QPalette.ToolTipText, QColor(49, 54, 59))
        palette.setColor(QPalette.Text, QColor(0, 0, 0))
        palette.setColor(QPalette.Button, QColor(85, 90, 95))
        palette.setColor(QPalette.ButtonText, QColor(50, 50, 50))
        palette.setColor(QPalette.BrightText, QColor(255, 255, 255))
        palette.setColor(QPalette.Link, QColor(41, 128, 185))
        palette.setColor(QPalette.Highlight, QColor(136, 136, 136))
        palette.setColor(QPalette.HighlightedText, QColor(239, 240, 241))
        palette.setColor(QPalette.Disabled, QPalette.Light, Qt.white)
        palette.setColor(QPalette.Disabled, QPalette.Shadow,
                         QColor(234, 234, 234))
        self.setPalette(palette)

        self.ser = ser
        self.sio = sio
        self.start = 1
        self.maxforce = 0000.00
        self.oldforce = 0.0
        self.force = 0.0
        self.initUI()

    def initUI(self):
        self.grid = QGridLayout()
        self.teams = {}
        self.currentteam = [QListWidgetItem_Team()]
        self.chartView = QChartView()
        self.loadNewGraph = True

        # LCD Widget to display the force
        self.forcelcd = QLCDNumber(7, self)
        self.forcelcd.setStyleSheet(
            "color: rgb(0, 210, 0); border-image: url(background3.png) stretch; background-repeat: no-repeat;"
        )
        lcdpalette = self.forcelcd.palette()
        lcdpalette.setColor(lcdpalette.Light, QtGui.QColor(0, 255, 0))
        lcdpalette.setColor(lcdpalette.Dark, QtGui.QColor(0, 0, 0))
        self.forcelcd.setPalette(lcdpalette)
        self.forcelcd.setFrameStyle(0)

        # Push buttons
        zero = QPushButton('Zero Scale', self)
        clearmax = QPushButton('Reset', self)
        clearmax.clicked.connect(self.reset)
        export = QPushButton('Export', self)
        togglestart = QPushButton('Start/Stop', self)

        # Push Button Functions
        zero.clicked.connect(self.zero_scale)
        clearmax.clicked.connect(self.reset)
        export.clicked.connect(self.exportTeams)
        togglestart.clicked.connect(self.toggle)

        # Textbox to enter in team name
        self.teaminput = QLineEdit()
        self.teaminput.setText('Enter team here')
        self.teaminput.returnPressed.connect(self.addTeam)

        # Current highest force text
        self.maxforce = 0000.00
        self.maxforcetxt = QLabel()
        self.maxforcetxt.setFont(QtGui.QFont("Quartz", 62))
        self.maxforcetxt.setText("Maximum Force: %.2f N" % self.maxforce)
        self.maxforcetxt.setStyleSheet(
            "color: rgb(0, 210, 0); background-image: url(maxbackground.png); background-attachment: fixed"
        )
        self.maxforcetxt.setAlignment(QtCore.Qt.AlignCenter)

        # List of teams and scores
        self.teamlist = QListWidget()
        self.teamlist.setStyleSheet("background-color: rgb(85, 90, 100);")
        self.teamlist.setSortingEnabled(True)
        self.teamlist.itemDoubleClicked.connect(self.selectTeam)

        # EGBC Logo
        self.EGBC = QLabel()
        img = QPixmap('EGBC_Logo_Mod2.png')
        self.EGBC.setPixmap(img)

        # Add widgets to grid and format
        self.grid.setColumnStretch(1, 2)
        self.grid.setColumnStretch(2, 2)
        self.grid.setColumnStretch(3, 2)
        self.grid.setColumnStretch(4, 2)
        self.grid.setColumnStretch(5, 1)
        self.grid.setColumnStretch(6, 2)
        self.grid.setRowStretch(1, 6)
        self.grid.setRowStretch(0, 1)

        self.grid.addWidget(self.maxforcetxt, 0, 1, 1, 4)
        self.grid.addWidget(self.EGBC, 0, 5, 1, 2)
        self.grid.addWidget(self.forcelcd, 1, 1, 1, 5)
        self.grid.addWidget(zero, 2, 1)
        self.grid.addWidget(clearmax, 2, 2)
        self.grid.addWidget(export, 2, 3)
        self.grid.addWidget(togglestart, 2, 4)
        self.grid.addWidget(self.teamlist, 1, 6)
        self.grid.addWidget(self.teaminput, 2, 6)

        self.updateforce()
        self.setLayout(self.grid)
        print(self.teaminput.width())
        self.showFullScreen()

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Escape:
            reply = QMessageBox.question(self, 'PyQt5 message',
                                         "Do you want to exit the program?",
                                         QMessageBox.Yes | QMessageBox.No,
                                         QMessageBox.No)
            if reply == QMessageBox.Yes:
                self.close()
            else:
                e.ignore()

    def zero_scale(self):
        self.ser.write(b'x\r\n')
        self.sio.flush()
        trunk = self.sio.readline()
        self.ser.write(b'1\r\n')
        self.sio.flush()
        for line in self.sio.readlines():
            if line == '>\r\n':
                break
        self.ser.write(b'x\r\nx\r\n')
        self.sio.flush()
        self.reset()
        return

    def reset(self):
        self.maxforce = 0.0
        self.force = 0.0
        self.maxforcetxt.setText(str("Maximum Force: %.2f N" % self.maxforce))
        self.forcelcd.display(self.force)

    def toggle(self):
        self.start ^= 1
        if self.start:
            self.chartView.hide()
            #self.grid.removeWidget(self.chartView)
            self.forcelcd.show()
        else:
            self.loadNewGraph = True
            self.forcelcd.hide()

    def addTeam(self):
        self.grid.removeWidget(self.chartView)
        team = self.teaminput.text()
        print(team)
        if team and team != "Enter team here":
            self.teaminput.setText("")
            self.teams[team] = [
                0.00,
            ]

            item = QListWidgetItem_Team()
            item.setText(team + " - " + str(self.teams[team]))
            item.setFont(QtGui.QFont("Times", 32))

            self.teamlist.addItem(item)

        with open(os.path.join(csv_path, team + '.csv'), 'w',
                  newline='') as csvfileout:
            writer = csv.DictWriter(csvfileout, fieldnames=['Sample', 'Force'])
            writer.writeheader()
            csvfileout.close()

    def selectTeam(self):
        self.chartView.hide()
        self.currentteam = self.teamlist.selectedItems()
        if not self.start:
            self.loadNewGraph = True

    def exportTeams(self):
        for team in self.teams:
            sample = 0
            with open(os.path.join(csv_path, team + '.csv'), 'w',
                      newline='') as csvfileout:
                writer = csv.DictWriter(csvfileout,
                                        fieldnames=['Sample', 'Force'])
                writer.writeheader()
                for samples in self.teams[team]:
                    writer.writerow({'Sample': sample, 'Force': samples})
                    sample += 1
            csvfileout.close()

    def get_force(self):
        self.ser.flushOutput()
        self.ser.flushInput()
        output = self.sio.readline()
        print(output)

        if 'Exiting' not in output and len(output) in range(10, 12):
            end = output.rfind(',kg')
            value = output[0:end]
        else:
            value = self.oldforce / 9.81
        return value

    def updateforce(self):
        self.grid.removeWidget(self.chartView)
        if self.start:
            # Generate some random force values for testing
            #self.force = random.randrange(1,5000,1)
            #self.force += 0.01

            self.force = round(float(self.get_force()) * 9.81, 2)
            self.forcelcd.display(self.force)
            self.oldforce = self.force

            # Update team dictionary and CSV file
            if self.currentteam[0].name():
                self.teams[self.currentteam[0].name()].append(self.force)

                start = time.time()
                with open(os.path.join(csv_path,
                                       self.currentteam[0].name() + ".csv"),
                          "a+",
                          newline='') as csvfile:
                    writer = csv.DictWriter(csvfile,
                                            fieldnames=['Sample', 'Force'])
                    csvfile.seek(0)

                    writer.writerow({
                        'Sample': self.currentteam[0].samples,
                        'Force': self.force
                    })
                    self.currentteam[0].samples += 1
                    csvfile.close()
                end = time.time()
                print(end - start)

        # New max force found, update the force label and list
            if self.force > self.maxforce:
                self.maxforce = self.force
                self.maxforcetxt.setText("Maximum Force: %.2f N" % self.force)
                self.currentteam[0].setForce(self.force)

        if not self.start and self.loadNewGraph:
            data = QSplineSeries()
            data.setName(self.currentteam[0].name())

            with open(os.path.join(csv_path,
                                   self.currentteam[0].name() + '.csv'),
                      "r",
                      newline='') as file:
                for line in file:
                    if "Sample" not in line:
                        s = line.split(",")
                        data.append(float(s[0]), float(s[1]))
                file.close()

            maxForceline = QLineSeries()
            maxForceline.setName("Maxiumum Force")
            maxForceline.append(0.0, self.currentteam[0].force())
            maxForceline.append(self.currentteam[0].samples,
                                self.currentteam[0].force())

            force_chart = QChart()
            force_chart.addSeries(data)
            force_chart.addSeries(maxForceline)
            force_chart.setToolTip("{}".format(self.maxforce))
            force_chart.setTitle("Force vs. Time Graph for {}".format(
                self.currentteam[0].name()))
            force_chart.createDefaultAxes()
            force_chart.axisY().setRange(0, self.currentteam[0].force() + 10)
            force_chart.setTheme(2)
            self.chartView = QChartView(force_chart)
            self.chartView.setRenderHint(QPainter.Antialiasing)
            # self.grid.removeWidget(self.chartView)
            self.grid.addWidget(self.chartView, 1, 1, 1, 5)
            print(self.grid.children())
            self.chartView.show()
            self.loadNewGraph = False

        QtCore.QTimer.singleShot(200, lambda: self.updateforce())
Exemplo n.º 7
0
class OperationalPlanning(QWidget):

    signal_gameover = Signal.get_signal().signal_gameover

    def __init__(self):
        super(OperationalPlanning, self).__init__()
        self.setObjectName('OperationalPlanning')
        self.setStyleSheet(GetQssFile.readQss('../resource/qss/operationalPlanning.qss'))

        self.log = logging.getLogger('StarCraftII')
        # test fix algorithm
        self.algorithm = None
        self.algorithmThread = None

        # font
        font = QFont()
        font.setWeight(50)
        font.setPixelSize(15)

        # set widget of layout
        self.frame = QFrame(self)
        self.frame.setGeometry(QDesktopWidget().screenGeometry())
        self.main_layout = QHBoxLayout(self)
        self.main_layout.setSpacing(20)
        self.setLayout(self.main_layout)

        # start action
        self.start = QPushButton()
        self.start.setObjectName('start')
        self.startLabel = QLabel('start')
        self.startLabel.setFont(font)
        self.start_layout = QVBoxLayout()
        self.start_layout.addWidget(self.start, alignment=Qt.AlignCenter)
        self.start_layout.addWidget(self.startLabel, alignment=Qt.AlignCenter)
        self.main_layout.addLayout(self.start_layout)

        # pause action
        # self.pause = QPushButton()
        # self.pause.setObjectName('pause')
        # self.pauseLabel = QLabel('pause')
        # self.pauseLabel.setFont(font)
        # self.pause_layout = QVBoxLayout()
        # self.pause_layout.addWidget(self.pause, alignment=Qt.AlignCenter)
        # self.pause_layout.addWidget(self.pauseLabel, alignment=Qt.AlignCenter)
        # self.main_layout.addLayout(self.pause_layout)

        # stop action
        self.stop = QPushButton()
        self.stop.setObjectName('stop')
        self.stopLabel = QLabel('stop')
        self.stopLabel.setFont(font)
        self.stop_layout = QVBoxLayout()
        self.stop_layout.addWidget(self.stop, alignment=Qt.AlignCenter)
        self.stop_layout.addWidget(self.stopLabel, alignment=Qt.AlignCenter)
        self.main_layout.addLayout(self.stop_layout)

        # switch policy action
        self.switch = QPushButton()
        self.switch.setObjectName('switch')
        self.switchLabel = QLabel('switch policy')
        self.switchLabel.setFont(font)
        self.switch_layout = QVBoxLayout()
        self.switch_layout.addWidget(self.switch, alignment=Qt.AlignCenter)
        self.switch_layout.addWidget(self.switchLabel, alignment=Qt.AlignCenter)
        self.main_layout.addLayout(self.switch_layout)

        # simulation time
        self.lcd = QLCDNumber()
        self.lcd.setObjectName('lcd')
        self.lcd.setDigitCount(10)
        self.lcd.setMode(QLCDNumber.Dec)
        self.lcd.setSegmentStyle(QLCDNumber.Flat)
        self.lcd.setFrameStyle(QFrame.Panel | QFrame.Raised)
        self.lcd.display(time.strftime("%X", time.localtime()))
        self.lcdLabel = QLabel('simulation time')
        self.lcdLabel.setFont(font)
        self.lcd_layout = QVBoxLayout()
        self.lcd_layout.addWidget(self.lcd, alignment=Qt.AlignBottom)
        self.lcd_layout.addWidget(self.lcdLabel, alignment=Qt.AlignBottom)
        self.main_layout.addLayout(self.lcd_layout)

        # define time
        self.qtime = QTimer()
        self.qtime.timeout.connect(self.refresh)

        # define global variable
        global interval
        interval = 0
        global start_or_pause
        start_or_pause = False
        global stop
        stop = True

        # map description
        self.map = QPushButton()
        self.map.setObjectName('map')
        self.mapLabel = QLabel('map description')
        self.mapLabel.setFont(font)
        self.map_layout = QVBoxLayout()
        self.map_layout.addWidget(self.map, alignment=Qt.AlignCenter)
        self.map_layout.addWidget(self.mapLabel, alignment=Qt.AlignCenter)
        self.main_layout.addLayout(self.map_layout)

        # add stretch
        self.main_layout.addStretch(1)

        # popup window
        self.dialog = None

        # initialization
        self.initUI()

    def refresh(self):
        timeworker = TimeWorker(self.lcd, OperationalPlanning.interval)
        OperationalPlanning.interval += 1
        timeworker.run()

    def initUI(self):
        # connect the slot function
        self.start.clicked.connect(self.buttonEvent)
        # self.pause.clicked.connect(self.buttonEvent)
        self.stop.clicked.connect(self.buttonEvent)
        self.switch.clicked.connect(self.buttonEvent)
        self.map.clicked.connect(self.buttonEvent)
        self.signal_gameover.connect(self.stopEvent)

    def buttonEvent(self):
        sender = self.sender()
        if sender == self.start:
            self.startEvent()
        # elif sender == self.pause:
        #     self.pauseEvent()
        elif sender == self.stop:
            self.stopEvent()
        elif sender == self.switch:
            self.switchEvent()
        elif sender == self.map:
            self.mapEvent()

    # start simulation
    def startEvent(self):
        message = 'start the simulation'
        self.log.info(message)
        Signal.get_signal().emit_signal_str(message)
        # fix rl algorithm

        globalInformation.set_value(strings.IS_STOP, False)

        OperationalPlanning.interval = 0
        OperationalPlanning.start_or_pause = True
        OperationalPlanning.stop = False
        self.qtime.start(1000)

        def playWithHuman():
            subprocess.Popen(strings.PLAY_WITH_HUMAN)

        def playWithMachine():
            """
                map_name = '3m'
                difficulty = '3'

                param_set = {}
                param_set['gamma'] = 0.99
                param_set['td_lambda'] = 0.8
                param_set['learning_rate'] = 0.0005
                param_set['alpha'] = 0.99
                param_set['eps'] = 1e-05
                param_set['epsilon_start'] = 1
                param_set['epsilon_end'] = 0.01
                param_set['time_length'] = 100000
                param_set['grad_norm_clip'] = 10
                param_set['before_learn'] = 50
                param_set['batch_size'] = 16
                param_set['target_update_interval'] = 400

                # # # iql set
                # param_set['algorithm'] = 'iql_CT'
                # path = '../model/' + map_name + '_iql_CT_3/'

                # COMA set
                param_set['algorithm'] = 'COMA'
                path = '../model/' + map_name + '_COMA_3/'

                param_set['map_name'] = map_name
                param_set['difficulty'] = difficulty
                param_set['path'] = path

                param_set['load_model'] = True
                param_set['test'] = True

                # self.algorithm = MARL()
                # self.algorithmThread = threading.Thread(
                #     target=self.algorithm.algorithm(param_set),
                #     name='StarCraft2Thread')
            """
            # self.algorithm = AlgorithmAgent()
            # self.algorithm.start()

            self.algorithm = MasterAgent()
            self.algorithm.start()

        if globalInformation.get_value('pattern') == strings.HUMAN_VS_MACHINE:
            playWithHuman()
        elif globalInformation.get_value('pattern') == strings.MACHINE_VS_MACHINE:
            playWithMachine()

        # Signal.get_signal().emit_signal_none()

    # pause simulation
    def pauseEvent(self):
        message = 'pause the simulation'
        self.log.info(message)
        Signal.get_signal().emit_signal_str(message)
        if OperationalPlanning.stop:
            return
        if OperationalPlanning.start_or_pause:
            self.qtime.stop()
            OperationalPlanning.start_or_pause = False
        else:
            self.qtime.start(1000)
            OperationalPlanning.start_or_pause = True

    # stop simulation
    def stopEvent(self):
        message = 'stop the simulation'
        self.log.info(message)
        Signal.get_signal().emit_signal_str(message)
        self.qtime.stop()
        OperationalPlanning.start_or_pause = False
        OperationalPlanning.stop = True
        globalInformation.set_value(strings.IS_STOP, True)

    # a description of current map
    def mapEvent(self):
        message = 'open the map description'
        self.log.info(message)
        Signal.get_signal().emit_signal_str(message)
        self.window = FramelessWindow('map description')
        self.dialog = QDialog()
        mapDialog = MapDescriptionDialog()
        mapDialog.setupUi(self.dialog)
        self.dialog.setModal(True)
        self.window.setWidget(self.dialog)
        self.initFrameLessWindow(
            QSize(700, 600),
            'Operational Planning',
            QIcon('../resource/drawable/logo.png')
        )
        self.window.show()
        # self.dialog.show()

    # switch policy of a dialog
    # there is a description of each algorithm
    def switchEvent(self):
        message = 'switch policy'
        self.log.info(message)
        Signal.get_signal().emit_signal_str(message)
        self.window = FramelessWindow('switch policy')
        self.dialog = QDialog()
        # tab item name
        list_str = [
            strings.ALGORITHM_COMA,
            strings.ALGORITHM_COMMNET_COMA,
            strings.ALGORITHM_QMIX,
            strings.ALGORITHM_QTRAN_ALT,
            strings.ALGORITHM_QTRAN_BASE,
            strings.ALGORITHM_VDN
        ]
        # item content
        list_item = [
            strings.CLASS_ALGORITHM_COMA,
            strings.CLASS_ALGORITHM_COMMNET_COMA,
            strings.CLASS_ALGORITHM_QMIX,
            strings.CLASS_ALGORITHM_QTRAN_ALT,
            strings.CLASS_ALGORITHM_QTRAN_BASE,
            strings.CLASS_ALGORITHM_VDN
        ]
        # title name
        self.listDialog = ListDialog(list_str, list_item, strings.OPERATIONAL_PLANNING_TITLE, strings.TYPE_POLICY)
        self.listDialog.setupUi(self.dialog, self.window)
        self.window.setWidget(self.dialog)
        self.initFrameLessWindow(
            QSize(700, 600),
            'Operational Planning',
            QIcon('../resource/drawable/logo.png')
        )
        self.window.show()
        # self.dialog.setModal(True)
        # self.dialog.show()

    def initFrameLessWindow(self, size, title, icon):
        self.window.resize(size)
        self.window.setWindowTitle(title)
        self.window.setWindowIcon(icon)
Exemplo n.º 8
0
class Rpm(QWidget):
    def __init__(self, parent):
        super(Rpm, self).__init__(parent)
        self.arguments = Arg_Class()

        self.rpmValue = 0

        self.rpmLCD = QLCDNumber(self)
        self.rpmLCD.display(str(10*int(self.rpmValue/10)).zfill(4))
        self.rpmLCD.move(200,130)
        self.rpmLCD.resize(260,180)
        self.rpmLCD.setFrameStyle(QFrame.NoFrame)
        self.rpmLCD.setSegmentStyle(QLCDNumber.Flat)

        self.rpmLabelFont = QFont("Helvetica", 14)

        self.rpmLabel = QLabel(self)
        self.rpmLabel.setText("x1000 r/min")
        self.rpmLabel.setFont(self.rpmLabelFont)
        self.rpmLabel.move(4.0, 4.0)
        self.rpmLabel.show()

        self.labelFont = QFont("Helvetica", 20, QFont.Bold, QFont.StyleItalic)

        x = 4.0
        y = 200.0

        #bar1
        xb = 4.0
        yb = 280.0
        self.leftx1 = xb
        self.lefty1 = yb
        self.bar1 = QPainterPath()
        self.bar1.moveTo(xb, yb)
        self.bar1.lineTo(xb, y + 8.0)
        xb += 32.0
        yb -= 38.0
        self.rightx1 = xb
        self.righty1 = yb
        self.bar1.lineTo(xb, y - 38.0 + 8.0)
        self.bar1.lineTo(xb, yb)
        self.bar1.lineTo(xb - 32.0, yb + 38.0)
        self.bar1.closeSubpath()

        #1st seg
        x = 4.0
        y = 200.0
        self.guage1 = QPainterPath()
        self.guage1.moveTo(x, y)
        self.guage1.moveTo(x, y - 8.0)
        x += 32.0
        y -= 38.0
        self.guage1.lineTo(x , y - 8.0)
        self.guage1.lineTo(x, y)
        self.guage1.lineTo(x - 32.0, y + 38.0)
        self.guage1.closeSubpath()
        self.label1 = QLabel(self)
        self.label1.setText("1")
        self.label1.setFont(self.labelFont)
        self.label1.move(x - 10.0, y - 40.0)
        self.label1.show()

        #bar2
        x += 4.0
        y -= 3.0
        xb += 4.0
        yb -= 3.0
        self.leftx2 = xb
        self.lefty2 = yb
        self.bar2 = QPainterPath()
        self.bar2.moveTo(xb, yb)
        self.bar2.lineTo(xb, y + 8.0)
        xb += 42.0
        yb -= 36.0
        self.rightx2 = xb
        self.righty2 = yb
        self.bar2.lineTo(xb, y - 36.0 + 8.0)
        self.bar2.lineTo(xb, yb)
        self.bar2.lineTo(xb - 42.0, yb + 36.0)
        self.bar2.closeSubpath()

        #2nd seg
        self.guage2 = QPainterPath()
        self.guage2.moveTo(x, y)
        self.guage2.moveTo(x, y - 8.0)
        x += 42.0
        y -= 36.0
        self.guage2.lineTo(x , y - 8.0)
        self.guage2.lineTo(x, y)
        self.guage2.lineTo(x - 42.0, y + 38.0)
        self.guage2.closeSubpath()
        self.label2 = QLabel(self)
        self.label2.setText("2")
        self.label2.setFont(self.labelFont)
        self.label2.move(x - 10.0, y - 40.0)
        self.label2.show()

        #bar3
        x += 4.0
        y -= 3.0
        xb += 4.0
        yb -= 3.0
        self.leftx3 = xb
        self.lefty3 = yb
        self.bar3 = QPainterPath()
        self.bar3.moveTo(xb, yb)
        self.bar3.lineTo(xb, y + 8.0)
        xb += 54.0
        yb -= 32.0
        self.rightx3 = xb
        self.righty3 = yb
        self.bar3.lineTo(xb, y - 32.0 + 8.0)
        self.bar3.lineTo(xb, yb)
        self.bar3.lineTo(xb - 54.0, yb + 32.0)
        self.bar3.closeSubpath()

        #3rd seg
        self.guage3 = QPainterPath()
        self.guage3.moveTo(x, y)
        self.guage3.moveTo(x, y - 8.0)
        x += 54.0
        y -= 32.0
        self.guage3.lineTo(x , y - 8.0)
        self.guage3.lineTo(x, y)
        self.guage3.lineTo(x - 54.0, y + 32.0)
        self.guage3.closeSubpath()
        self.label3 = QLabel(self)
        self.label3.setText("3")
        self.label3.setFont(self.labelFont)
        self.label3.move(x - 10.0, y - 40.0)
        self.label3.show()

        #bar4
        x += 4.0
        y -= 1.0
        xb += 4.0
        yb -= 1.0
        self.leftx4 = xb
        self.lefty4 = yb
        self.bar4 = QPainterPath()
        self.bar4.moveTo(xb, yb)
        self.bar4.lineTo(xb, y + 8.0)
        xb += 70.0
        yb -= 30.0
        self.rightx4 = xb
        self.righty4 = yb
        self.bar4.lineTo(xb, y - 30.0 + 8.0)
        self.bar4.lineTo(xb, yb)
        self.bar4.lineTo(xb - 70.0, yb + 30.0)
        self.bar4.closeSubpath()

        #4th seg
        self.guage4 = QPainterPath()
        self.guage4.moveTo(x, y)
        self.guage4.moveTo(x, y - 8.0)
        x += 70.0
        y -= 30.0
        self.guage4.lineTo(x , y - 8.0)
        self.guage4.lineTo(x, y)
        self.guage4.lineTo(x - 70.0, y + 30.0)
        self.guage4.closeSubpath()
        self.label4 = QLabel(self)
        self.label4.setText("4")
        self.label4.setFont(self.labelFont)
        self.label4.move(x - 10.0, y - 40.0)
        self.label4.show()

        #bar5
        x += 4.0
        y -= 1.0
        xb += 4.0
        yb -= 1.0
        self.leftx5 = xb
        self.lefty5 = yb
        self.bar5 = QPainterPath()
        self.bar5.moveTo(xb, yb)
        self.bar5.lineTo(xb, y + 8.0)
        xb += 108.0
        yb -= 16.0
        self.rightx5 = xb
        self.righty5 = yb
        self.bar5.lineTo(xb, y - 16.0 + 8.0)
        self.bar5.lineTo(xb, yb)
        self.bar5.lineTo(xb - 108.0, yb + 16.0)
        self.bar5.closeSubpath()

        #5th seg
        self.guage5 = QPainterPath()
        self.guage5.moveTo(x, y)
        self.guage5.moveTo(x, y - 8.0)
        x += 108.0
        y -= 16.0
        self.guage5.lineTo(x , y - 8.0)
        self.guage5.lineTo(x, y)
        self.guage5.lineTo(x - 108.0, y + 16.0)
        self.guage5.closeSubpath()
        self.label5 = QLabel(self)
        self.label5.setText("5")
        self.label5.setFont(self.labelFont)
        self.label5.move(x - 8.0, y - 40.0)
        self.label5.show()

        #bar6
        x += 4.0
        y -= 0.0
        xb += 4.0
        yb -= 0.0
        self.leftx6 = xb
        self.lefty6 = yb
        self.bar6 = QPainterPath()
        self.bar6.moveTo(xb, yb)
        self.bar6.lineTo(xb, y + 8.0)
        xb += 132.0
        yb -= 0.0
        self.rightx6 = xb
        self.righty6 = yb
        self.bar6.lineTo(xb, y - 0.0 + 8.0)
        self.bar6.lineTo(xb, yb)
        self.bar6.lineTo(xb - 132.0, yb + 0.0)
        self.bar6.closeSubpath()

        #6th seg
        self.guage6 = QPainterPath()
        self.guage6.moveTo(x, y)
        self.guage6.moveTo(x, y - 8.0)
        x += 132.0
        y -= 0.0
        self.guage6.lineTo(x , y - 8.0)
        self.guage6.lineTo(x, y)
        self.guage6.lineTo(x - 132.0, y + 0.0)
        self.guage6.closeSubpath()
        self.label6 = QLabel(self)
        self.label6.setText("6")
        self.label6.setFont(self.labelFont)
        self.label6.move(x - 6.0, y - 40.0)
        self.label6.show()

        #bar7
        x += 4.0
        y -= 0.0
        xb += 4.0
        yb -= 0.0
        self.leftx7 = xb
        self.lefty7 = yb
        self.bar7 = QPainterPath()
        self.bar7.moveTo(xb, yb)
        self.bar7.lineTo(xb, y + 8.0)
        xb += 128.0
        yb -= 0.0
        self.rightx7 = xb
        self.righty7 = yb
        self.bar7.lineTo(xb, y - 0.0 + 8.0)
        self.bar7.lineTo(xb, yb)
        self.bar7.lineTo(xb - 128.0, yb + 0.0)
        self.bar7.closeSubpath()

        #7th seg
        self.guage7 = QPainterPath()
        self.guage7.moveTo(x, y)
        self.guage7.moveTo(x, y - 8.0)
        x += 128.0
        y -= 0.0
        self.guage7.lineTo(x , y - 8.0)
        self.guage7.lineTo(x, y)
        self.guage7.lineTo(x - 128.0, y + 0.0)
        self.guage7.closeSubpath()
        self.label7 = QLabel(self)
        self.label7.setText("7")
        self.label7.setFont(self.labelFont)
        self.label7.move(x - 6.0, y - 40.0)
        self.label7.show()

        #bar8
        x += 4.0
        y -= 0.0
        xb += 4.0
        yb -= 0.0
        self.leftx8 = xb
        self.lefty8 = yb
        self.bar8 = QPainterPath()
        self.bar8.moveTo(xb, yb)
        self.bar8.lineTo(xb, y + 8.0)
        xb += 96.0
        yb -= 0.0
        self.rightx8 = xb
        self.righty8 = yb
        self.bar8.lineTo(xb, y - 0.0 + 8.0)
        self.bar8.lineTo(xb, yb)
        self.bar8.lineTo(xb - 96.0, yb + 0.0)
        self.bar8.closeSubpath()

        #8th seg
        self.guage8 = QPainterPath()
        self.guage8.moveTo(x, y)
        self.guage8.moveTo(x, y - 8.0)
        x += 96.0
        y -= 0.0
        self.guage8.lineTo(x , y - 8.0)
        self.guage8.lineTo(x, y)
        self.guage8.lineTo(x - 96.0, y + 0.0)
        self.guage8.closeSubpath()
        self.label8 = QLabel(self)
        self.label8.setText("8")
        self.label8.setFont(self.labelFont)
        self.label8.move(x - 6.0, y - 40.0)
        self.label8.show()

        #bar9
        x += 4.0
        y -= 0.0
        xb += 4.0
        yb -= 0.0
        self.leftx9 = xb
        self.lefty9 = yb
        self.bar9 = QPainterPath()
        self.bar9.moveTo(xb, yb)
        self.bar9.lineTo(xb, y + 8.0)
        xb += 96.0
        yb -= 0.0
        self.rightx9 = xb
        self.righty9 = yb
        self.bar9.lineTo(xb, y - 0.0 + 8.0)
        self.bar9.lineTo(xb, yb)
        self.bar9.lineTo(xb - 96.0, yb + 0.0)
        self.bar9.closeSubpath()

        #9th seg
        self.guage9 = QPainterPath()
        self.guage9.moveTo(x, y)
        self.guage9.moveTo(x, y - 8.0)
        x += 96.0
        y -= 0.0
        self.guage9.lineTo(x , y - 8.0)
        self.guage9.lineTo(x, y)
        self.guage9.lineTo(x - 96.0, y + 0.0)
        self.guage9.closeSubpath()


    @pyqtSlot(float)
    def rpm_update(self, value):
        #self.rpmValue = value
        self.rpmValue = (800 * int(self.rpmValue) + (1024 - 800) * int(value)) >> 10
        if self.rpmValue < 0:
            self.rpmValue = 0
        self.rpmLCD.display(str(10*int(self.rpmValue/10)).zfill(4))#displays rpm, reduces precision to imporve readablity
        self.update()


    def paintEvent(self, event):
        qp = QPainter(self)
        #Antialiasing smooths the edges of the graphics, TODO: add a flag so its not set everytime, should help preformence
        qp.setRenderHints(QPainter.Antialiasing)
        qp.setPen(Qt.white)
        qp.setBrush(Qt.white)

        qp.drawPath(self.guage1)
        qp.drawPath(self.guage2)
        qp.drawPath(self.guage3)
        qp.drawPath(self.guage4)
        qp.drawPath(self.guage5)
        qp.drawPath(self.guage6)
        qp.drawPath(self.guage7)
        qp.drawPath(self.guage8)
        qp.drawPath(self.guage9)

        if self.rpmValue > 0.0 and self.rpmValue <= 999:
            rightx = self.leftx1 + (self.rpmValue / 1000.0 * (self.rightx1 - self.leftx1))
            righty = self.lefty1 - (self.rpmValue / 1000.0 * (self.lefty1 - self.righty1))
            bar = QPainterPath()
            bar.moveTo(self.leftx1, self.lefty1)
            bar.lineTo(self.leftx1, self.lefty1 - 72.0)
            bar.lineTo(rightx, righty - 72.0)
            bar.lineTo(rightx, righty)
            bar.lineTo(self.leftx1, self.lefty1)
            bar.closeSubpath()
            qp.drawPath(bar)
        elif self.rpmValue >= 1000 and self.rpmValue <= 1999:
            qp.drawPath(self.bar1)
            rightx = self.leftx2 + ((self.rpmValue - 1000.0) / 1000.0 * (self.rightx2 - self.leftx2))
            righty = self.lefty2 - ((self.rpmValue - 1000.0) / 1000.0 * (self.lefty2 - self.righty2))
            bar = QPainterPath()
            bar.moveTo(self.leftx2, self.lefty2)
            bar.lineTo(self.leftx2, self.lefty2 - 72.0)
            bar.lineTo(rightx, righty - 72.0)
            bar.lineTo(rightx, righty)
            bar.lineTo(self.leftx2, self.lefty2)
            bar.closeSubpath()
            qp.drawPath(bar)
        elif self.rpmValue >= 2000 and self.rpmValue <= 2999:
            qp.drawPath(self.bar1)
            qp.drawPath(self.bar2)
            rightx = self.leftx3 + ((self.rpmValue - 2000.0) / 1000.0 * (self.rightx3 - self.leftx3))
            righty = self.lefty3 - ((self.rpmValue - 2000.0) / 1000.0 * (self.lefty3 - self.righty3))
            bar = QPainterPath()
            bar.moveTo(self.leftx3, self.lefty3)
            bar.lineTo(self.leftx3, self.lefty3 - 72.0)
            bar.lineTo(rightx, righty - 72.0)
            bar.lineTo(rightx, righty)
            bar.lineTo(self.leftx3, self.lefty3)
            bar.closeSubpath()
            qp.drawPath(bar)
        elif self.rpmValue >= 3000 and self.rpmValue <= 3999:
            qp.drawPath(self.bar1)
            qp.drawPath(self.bar2)
            qp.drawPath(self.bar3)
            rightx = self.leftx4 + ((self.rpmValue - 3000.0) / 1000.0 * (self.rightx4 - self.leftx4))
            righty = self.lefty4 - ((self.rpmValue - 3000.0) / 1000.0 * (self.lefty4 - self.righty4))
            bar = QPainterPath()
            bar.moveTo(self.leftx4, self.lefty4)
            bar.lineTo(self.leftx4, self.lefty4 - 72.0)
            bar.lineTo(rightx, righty - 72.0)
            bar.lineTo(rightx, righty)
            bar.lineTo(self.leftx4, self.lefty4)
            bar.closeSubpath()
            qp.drawPath(bar)
        elif self.rpmValue >= 4000 and self.rpmValue <= 4999:
            qp.drawPath(self.bar1)
            qp.drawPath(self.bar2)
            qp.drawPath(self.bar3)
            qp.drawPath(self.bar4)
            rightx = self.leftx5 + ((self.rpmValue - 4000.0) / 1000.0 * (self.rightx5 - self.leftx5))
            righty = self.lefty5 - ((self.rpmValue - 4000.0) / 1000.0 * (self.lefty5 - self.righty5))
            bar = QPainterPath()
            bar.moveTo(self.leftx5, self.lefty5)
            bar.lineTo(self.leftx5, self.lefty5 - 72.0)
            bar.lineTo(rightx, righty - 72.0)
            bar.lineTo(rightx, righty)
            bar.lineTo(self.leftx5, self.lefty5)
            bar.closeSubpath()
            qp.drawPath(bar)
        elif self.rpmValue >= 5000 and self.rpmValue <= 5999:
            qp.drawPath(self.bar1)
            qp.drawPath(self.bar2)
            qp.drawPath(self.bar3)
            qp.drawPath(self.bar4)
            qp.drawPath(self.bar5)
            rightx = self.leftx6 + ((self.rpmValue - 5000.0) / 1000.0 * (self.rightx6 - self.leftx6))
            righty = self.righty6
            bar = QPainterPath()
            bar.moveTo(self.leftx6, self.lefty6)
            bar.lineTo(self.leftx6, self.lefty6 - 72.0)
            bar.lineTo(rightx, righty - 72.0)
            bar.lineTo(rightx, righty)
            bar.lineTo(self.leftx6, self.lefty6)
            bar.closeSubpath()
            qp.drawPath(bar)
        elif self.rpmValue >= 6000 and self.rpmValue <= 6999:
            qp.drawPath(self.bar1)
            qp.drawPath(self.bar2)
            qp.drawPath(self.bar3)
            qp.drawPath(self.bar4)
            qp.drawPath(self.bar5)
            qp.drawPath(self.bar6)
            rightx = self.leftx7 + ((self.rpmValue - 6000.0) / 1000.0 * (self.rightx7 - self.leftx7))
            righty = self.righty7
            bar = QPainterPath()
            bar.moveTo(self.leftx7, self.lefty7)
            bar.lineTo(self.leftx7, self.lefty7 - 72.0)
            bar.lineTo(rightx, righty - 72.0)
            bar.lineTo(rightx, righty)
            bar.lineTo(self.leftx7, self.lefty7)
            bar.closeSubpath()
            qp.drawPath(bar)
        elif self.rpmValue >= 7000 and self.rpmValue <= 7999:
            qp.drawPath(self.bar1)
            qp.drawPath(self.bar2)
            qp.drawPath(self.bar3)
            qp.drawPath(self.bar4)
            qp.drawPath(self.bar5)
            qp.drawPath(self.bar6)
            qp.drawPath(self.bar7)
            rightx = self.leftx8 + ((self.rpmValue - 7000.0) / 1000.0 * (self.rightx8 - self.leftx8))
            righty = self.righty8
            bar = QPainterPath()
            bar.moveTo(self.leftx8, self.lefty8)
            bar.lineTo(self.leftx8, self.lefty8 - 72.0)
            bar.lineTo(rightx, righty - 72.0)
            bar.lineTo(rightx, righty)
            bar.lineTo(self.leftx8, self.lefty8)
            bar.closeSubpath()
            qp.drawPath(bar)
        elif self.rpmValue >= 8000:
            qp.drawPath(self.bar1)
            qp.drawPath(self.bar2)
            qp.drawPath(self.bar3)
            qp.drawPath(self.bar4)
            qp.drawPath(self.bar5)
            qp.drawPath(self.bar6)
            qp.drawPath(self.bar7)
            qp.drawPath(self.bar8)
            rightx = self.leftx9 + ((self.rpmValue - 8000.0) / 1000.0 * (self.rightx9 - self.leftx9))
            righty = self.righty9
            bar = QPainterPath()
            bar.moveTo(self.leftx9, self.lefty9)
            bar.lineTo(self.leftx9, self.lefty9 - 72.0)
            bar.lineTo(rightx, righty - 72.0)
            bar.lineTo(rightx, righty)
            bar.lineTo(self.leftx9, self.lefty9)
            bar.closeSubpath()
            qp.drawPath(bar)