class Digital_clock(QMainWindow):
    def __init__(self):
        super().__init__()
        title = "Digital Clock -by Anirudh"
        top = 400
        left = 300
        width = 550
        height = 150

        icon = "clock.png"

        self.setWindowTitle(title)
        self.setGeometry(top, left, width, height)
        self.setWindowIcon((QIcon(icon)))

        self.initUI()
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.showTime)
        self.timer.start(1000)

    def initUI(self):
        self.clock_screen = QLCDNumber(self)
        self.clock_screen.setStyleSheet(
            "color : black ; background-color: white")
        self.clock_screen.setDigitCount(8)
        self.clock_screen.setGeometry(QtCore.QRect(0, 0, 550, 150))
        self.showTime()

    def showTime(self):
        showTime = time.strftime("%I:%M:%S")
        self.clock_screen.display(showTime)
Ejemplo n.º 2
0
class DigitalClock(QMainWindow):
    def __init__(self):
        super().__init__()
 
        self.setWindowTitle('Digital Clock - by ganesh')
        self.setGeometry(400,300,550,150)
        self.setWindowIcon(QtGui.QIcon('clock.png'))
 
        self.initUI()
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.current_time)
        self.timer.start(1000)
 
 
    def initUI(self):
        self.clock_screen = QLCDNumber(self)
        self.clock_screen.setStyleSheet("color: black; background-color: white")
        self.clock_screen.setDigitCount(8)
        self.clock_screen.setGeometry(QtCore.QRect(0, 0, 550, 150))
        self.current_time()
 
 
    def current_time(self):
        current = time.strftime("%I:%M:%S")
        self.clock_screen.display(current)
Ejemplo n.º 3
0
class Actions(QDialog):
    """
    Simple dialog that consists of a Progress Bar and a Button.
    Clicking on the button results in the start of a timer
    and updates the progress bar.
    """
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        '''
        self.setWindowTitle('Progress Bar')
        self.progress = QProgressBar(self)
        self.progress.setGeometry(0, 0, 300, 25)
        self.progress.setMaximum(100)
        '''
        self.setWindowTitle('LCD Display')
        self.LCD = QLCDNumber(self)
        self.LCD.setGeometry(0, 0, 300, 25)
        '''        
        self.button = QPushButton('Start', self)
        self.button.move(0, 30)
        '''
        self.show()
        #   self.button.clicked.connect(self.onButtonClick)

        #def onButtonClick(self):
        self.calc = External()
        self.calc.countChanged.connect(self.onCountChanged)
        self.calc.start()

    def onCountChanged(self, value):
        #self.progress.setValue(value)
        self.LCD.display(value)
Ejemplo n.º 4
0
    def initUI(self):
        lcd = QLCDNumber(self)
        dial = QDial(self)

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle("拨号")

        lcd.setGeometry(100, 50, 150, 60)
        dial.setGeometry(120, 120, 100, 100)

        dial.valueChanged.connect(lcd.display)

        self.show()
    def initUI(self):
        self.setGeometry(300, 300, 400, 300)
        self.setWindowTitle(self.title)

        lcd = QLCDNumber(self)
        lcd.setGeometry(100, 50, 150, 60)

        slider = QSlider(self)
        slider.setGeometry(120, 120, 50, 100)

        slider.valueChanged.connect(lcd.display)

        self.show()
Ejemplo n.º 6
0
    def initUi(self):
        lcd = QLCDNumber(self)
        dial = QDial(self)

        # 屏幕位置及大小
        self.setGeometry(500, 100, 350, 250)
        self.setWindowTitle('学点编程吧')

        lcd.setGeometry(100, 50, 150, 60)
        dial.setGeometry(120, 120, 100, 100)

        dial.valueChanged.connect(lcd.display)

        self.show()
Ejemplo n.º 7
0
 def initUi(self):
     lcd = QLCDNumber(self)
     lcd2 = QLCDNumber(self)
     dial = QDial(self)
     slider = QSlider(self)
     self.setGeometry(300, 300, 700, 250)
     self.setWindowTitle('学点编程吧')
     lcd.setGeometry(100, 50, 150, 60)
     lcd2.setGeometry(400, 50, 150, 60)
     dial.setGeometry(120, 120, 100, 100)
     slider.setGeometry(420, 120, 100, 100)
     dial.valueChanged.connect(lcd.display)
     slider.valueChanged.connect(lcd2.display)
     self.show()
    def initUi(self):
        #QDial对象发送信号。 QLCDNumber接收信号的。 槽是对信号作出反应的方法
        lcd = QLCDNumber(self)
        dial = QDial(self)

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('学点编程吧')

        lcd.setGeometry(100, 50, 150, 60)
        dial.setGeometry(120, 120, 100, 100)

        # 将QDial这个小部件的一个valueChanged信号连接到lcd数字的显示槽。
        dial.valueChanged.connect(lcd.display)

        self.show()
Ejemplo n.º 9
0
    def initUi(self):
        lcd = QLCDNumber(self)
        lab = QLabel(self)
        #dial = QDial(self)
        dial = QSlider(self)

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('忽然之间')

        lab.setGeometry(90, 80, 70, 60)
        lcd.setGeometry(100, 50, 150, 60)
        dial.setGeometry(120, 120, 100, 100)

        dial.valueChanged.connect(lcd.display)
        lab.setText('a')
        self.show()
Ejemplo n.º 10
0
    def addSlider(self):
        sld = QSlider(Qt.Horizontal, self)
        # establecer posicion (x,y) y dimenciones (ancho, alto)
        sld.setGeometry(20, 80, 150, 30)
        # indicar rango de valores validos
        sld.setRange(50, 250)
        # establecer valor inicial
        sld.setValue(120)
        # evento producido cada vez que cambia el valor
        sld.valueChanged.connect(self.valChange)

        num = QLCDNumber(self)
        num.setGeometry(180, 80, 50, 30)
        # mostrar valor inicial
        num.display(sld.value())
        # cambiar valor QLCDNumber cuando cambiar QSlider
        sld.valueChanged.connect(num.display)
Ejemplo n.º 11
0
class MainWindow(QWidget):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        # --- Slider erstellen -----
        self.mySlider = QSlider(Qt.Horizontal, self)

        # mySlider = mySliderClass()
        self.mySlider.setFocusPolicy(Qt.NoFocus)
        self.mySlider.setGeometry(30, 40, 180, 30)  # x,y,w,h
        self.mySlider.setValue(20)

        # --- LCD konstruieren -----
        self.myLcd = QLCDNumber(2, self)
        self.myLcd.setGeometry(60, 100, 80, 50)  # x,y,w,h
        self.myLcd.display(20)

        # Verbinden des Signals valueChanged
        # mit der Slot-Funktion myLcd.display
        self.mySlider.valueChanged[int].connect(self.myLcd.display)

        # --- zwei PushButtons
        myPBmore = QPushButton(self)
        myPBmore.setText('>')
        myPBmore.setGeometry(0, 0, 40, 40)  # x,y,w,h
        myPBmore.clicked.connect(self.plus)
        self.myPBless = QPushButton(self)
        self.myPBless.setText('<')
        self.myPBless.setGeometry(180, 0, 40, 40)  # x,y,w,h
        self.myPBless.clicked.connect(self.minus)

        # --- Window konfigurieren
        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('Robotik Bocholt - Slider LCD')
        self.show()

    # --- Die beiden Slot-Methoden
    def plus(self):
        wert = self.mySlider.value()  # Slider Wert holen
        wert = wert + 1
        self.mySlider.setValue(wert)  # Slider Wert setzen

    def minus(self):
        wert = self.mySlider.value()
        wert = wert - 1
        self.mySlider.setValue(wert)
Ejemplo n.º 12
0
    def initUi(self):
        #lcd是什么玩意,lcd数字显示槽
        lcd = QLCDNumber(self)
        #用了对话框了
        dial = QDial(self)

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('学点编程吧')

        lcd.setGeometry(100, 50, 150, 60)
        dial.setGeometry(120, 120, 100, 100)

        #出现了!事件
        #将QDial这个小部件的一个valueChanged信号连接到lcd数字的显示槽
        #dial对象发送信号,lcd接受信号,槽是对信号做出的反应
        dial.valueChanged.connect(lcd.display)

        self.show()
Ejemplo n.º 13
0
    def initUI(self):

        # 数字のウィジェットを作成
        lcd = QLCDNumber(self)
        lcd.setGeometry(100,100,80,50)
        # スライダーウィジェット作成
        sld = QSlider(Qt.Horizontal, self)

        vbox = QVBoxLayout()
        vbox.addWidget(lcd)
        vbox.addWidget(sld)

        self.setLayout(vbox)
        # スライダーを変更すると、数字も切り替わる
        sld.valueChanged.connect(lcd.display)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Signal & slot')
        self.show()
Ejemplo n.º 14
0
    def initUi(self):
        '''
        界面初始设置
        '''
        lcd = QLCDNumber(self)
        # dial = QDial(self)
        sld = QSlider(Qt.Horizontal, self)  #滑块式水平放置的

        self.setGeometry(300, 300, 350, 250)
        self.setWindowTitle('学点编程吧')

        lcd.setGeometry(100, 50, 150, 60)
        # dial.setGeometry(120, 120, 100, 100)
        sld.setGeometry(120, 120, 90, 50)

        # dial.valueChanged.connect(lcd.display)
        sld.valueChanged.connect(lcd.display)
        #拖动后数值直接在LCD上显示出来

        self.show()
Ejemplo n.º 15
0
class ClassMain(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.dong_ho = QLCDNumber(self)
        self.dong_ho.setNumDigits(8)
        self.dong_ho.setGeometry(10, 10, 280, 80)

        dem_gio = QTimer(self)
        dem_gio.timeout.connect(self.hien_gio)
        dem_gio.start(1000)

        self.setWindowTitle('Vsmart CARPARKING SYSTEM V.1.01')
        self.setWindowIcon(QIcon('clock.png'))
        self.resize(300, 100)  #setFixedSize(300,100)
        self.show()

    def hien_gio(self):
        self.dong_ho.display(strftime("%H" + ":" + "%M" + ":" + "%S"))
Ejemplo n.º 16
0
    def initUI(self):
        self.setGeometry(0, 0, 500, 300)
        self.setWindowTitle('Фокус со словами')

        self.btn = QPushButton('->', self)
        self.btn.resize(50, 50)
        self.btn.move(225, 125)
        self.btn.clicked.connect(self.f)

        self.line1 = QLineEdit(self)
        self.line1.setText('')
        self.line1.setGeometry(0, 0, 175, 50)
        self.line1.move(25, 25)

        self.line2 = QLineEdit(self)
        self.line2.setText('')
        self.line2.setGeometry(0, 0, 175, 50)
        self.line2.move(25, 200)

        self.label1 = QLabel(self)
        self.label1.setText('Первое число(целое):')
        self.label1.move(25, 0)

        self.label1 = QLabel(self)
        self.label1.setText('Второе число(целое):')
        self.label1.move(25, 175)

        self.lsds = []
        self.f = ['Сумма', 'Разность', 'Произведение', 'Частое']
        for i in range(4):
            a = QLCDNumber(self)
            self.lsds.append(a)
            a.setGeometry(0, 0, 125, 30)
            a.move(350, 25 + 75 * i)

            a = QLabel(self)
            a.setText(self.f[i])
            a.move(250, 25 + 75 * i)
Ejemplo n.º 17
0
class Example(QWidget):
    def __init__(self):
        super().__init__()
        # 创建 QLCDNumber、QDial、slider
        self.lcd = QLCDNumber(self)
        self.dial = QDial(self)
        self.slider = QSlider(self)
        # 设定各个部件属性
        self.initUI()

    def initUI(self):
        # 设置窗口
        self.setWindowTitle("信号、槽")
        self.setGeometry(300, 300, 300, 200)
        # 设置 QLCDNumber、QDial
        self.lcd.setGeometry(115, 50, 70, 40)
        self.dial.setGeometry(80, 120, 70, 70)
        self.slider.setGeometry(190, 120, 20, 70)
        # 事件绑定
        self.dial.valueChanged.connect(self.lcd.display)
        self.slider.valueChanged.connect(self.lcd.display)
        # 窗口显示
        self.show()
Ejemplo n.º 18
0
class Placar(QMainWindow):
    def __init__(self):
        super().__init__()

        self.title = 'Placar para gincanas'
        self.top = 0
        self.left = 0
        self.width = 1366
        self.height = 768

        self.valorPlacarA = 0
        self.valorPlacarB = 0

        self.initWindow()
        self.cronoWindow = Cronometro()

    def initWindow(self):

        #espaço em branco
        espaco = QWidget()
        espaco.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)

        #Titulo do programa
        self.labelTituloJanela = QLabel(' PLACAR GINCANA', self)
        self.labelTituloJanela.setGeometry(450, 10, 430, 100)
        self.labelTituloJanela.setStyleSheet(
            'QLabel {font: 45px; color: white; font: bold; background-color: #19B5FE; border-radius: 10px}'
        )

        #Seção dos LCDS
        self.lcdPlacar1 = QLCDNumber(self)
        self.lcdPlacar2 = QLCDNumber(self)
        self.lcdPlacar1.setGeometry(50, 120, 300, 250)
        self.lcdPlacar2.setGeometry(940, 120, 300, 250)
        self.lcdPlacar1.setStyleSheet(
            'QLCDNumber {background-color: #000000; color: red; font: bold}')
        self.lcdPlacar1.setSegmentStyle(2)  # QLCDNumber::SegmentStyle
        self.lcdPlacar2.setStyleSheet(
            'QLCDNumber {background-color: #000000; color: red; font: bold}')
        self.lcdPlacar2.setSegmentStyle(2)

        #Label dos nomes dos grupos
        self.labelGrupA = QLabel('Grupo A', self)
        self.labelGrupB = QLabel('Grupo B', self)
        self.labelGrupA.setGeometry(125, 20, 200, 100)
        self.labelGrupA.setStyleSheet('QLabel {font: 40px; font: bold;}')
        self.labelGrupB.setStyleSheet('QLabel {font: 40px; font: bold}')
        self.labelGrupB.setGeometry(1010, 20, 200, 100)

        #Label do cronometro
        self.labelCrono = QLabel(' 00:00 ', self)
        self.labelCrono.setGeometry(130, 490, 170, 100)
        self.labelCrono.setStyleSheet(
            'QLabel {background-color: #336E7B; color: white; font: 50px; border: None; border-radius: 20px}'
        )

        #Label contendo a imagem central do programa
        self.imagemLabel = QLabel(self)
        pixmap = QPixmap('imagens/competir.png')
        self.imagemLabel.setPixmap(pixmap)
        self.imagemLabel.setGeometry(490, 120, 330, 348)

        #Botões de pontuar os grupos
        self.bntGrupA = QPushButton('Pontuar Grupo A', self)
        self.bntGrupB = QPushButton('Pontuar Grupo B', self)
        self.bntGrupA.setGeometry(370, 520, 200, 60)
        self.bntGrupB.setGeometry(690, 520, 200, 60)
        self.bntGrupA.setStyleSheet(
            'QPushButton {font: 23px; font: bold; background-color: #0AEB7E}')
        self.bntGrupB.setStyleSheet(
            'QPushButton {font: 23px; font: bold; background-color: #0AEB7E}')

        #Spin para definir a pontução (Está entre os dois botões)
        self.spinBox = QSpinBox(self)
        self.spinBox.setMaximum(100)
        self.spinBox.setGeometry(592, 520, 90, 60)
        self.spinBox.setStyleSheet('QSpinBox {font: 50px}')

        #Actions Buttons pontuação
        self.bntGrupA.clicked.connect(lambda: self.setValorLcd(1))
        self.bntGrupB.clicked.connect(lambda: self.setValorLcd(2))

        #Seção do cronômetro
        self.labelCronometro = QLabel('Cronometro', self)
        #self.labelCronometro.setIcon(QtGui.QIcon('crono'))
        self.labelCronometro.setStyleSheet(
            'QLabel {font: 25px; color: black; font: bold; background-color: #ECF0F1;}'
        )
        self.labelCronometro.setGeometry(145, 440, 150, 50)

        self.bntIniciarCrono = QPushButton('INICIAR', self)
        self.bntIniciarCrono.setGeometry(130, 590, 185, 50)
        self.bntIniciarCrono.setStyleSheet(
            'QPushButton {font: 20px; color: black; font: bold; background-color: #ECF0F1; border-radius: 10px}'
        )
        self.bntIniciarCrono.setIcon(QtGui.QIcon('imagens/play'))
        self.bntIniciarCrono.setCheckable(True)
        self.bntIniciarCrono.clicked.connect(self.threadCrono)

        #Botão configurar cronometro
        self.bntConfingCronometro = QPushButton('Configurar', self)
        self.bntConfingCronometro.setGeometry(180, 650, 100, 50)
        self.bntConfingCronometro.setStyleSheet(
            'QPushButton {font: 18px; color: black; font: bold; background-color: #ECF0F1; border-radius: 10px}'
        )
        self.bntConfingCronometro.clicked.connect(self.configCronometro)

        #Seção Sortear Número
        self.labelSorteio = QLabel('Sortear Número', self)
        self.labelSorteio.setStyleSheet(
            'QLabel {font: 25px; color: black; font: bold; background-color: #ECF0F1;}'
        )
        self.labelSorteio.setGeometry(970, 450, 200, 50)
        self.labelAte = QLabel('ATÉ', self)
        self.labelAte.setStyleSheet(
            'QLabel {font: 25px; color: black; font: bold; background-color: #ECF0F1;}'
        )
        self.labelAte.setGeometry(1040, 520, 50, 50)
        self.spinBoxNumb1 = QSpinBox(self)
        self.spinBoxNumb2 = QSpinBox(self)
        self.spinBoxNumb1.setGeometry(940, 520, 90, 50)
        self.spinBoxNumb2.setGeometry(1100, 520, 90, 50)
        self.spinBoxNumb1.setStyleSheet('QSpinBox {font: 50px}')
        self.spinBoxNumb2.setStyleSheet('QSpinBox {font: 50px}')
        self.bntSortear = QPushButton('Sortear', self)
        self.bntSortear.setGeometry(1020, 590, 90, 50)
        self.bntSortear.setStyleSheet(
            'QPushButton {font: 25px; color: black; font: bold; background-color: #F9690E; border-radius: 10px}'
        )
        self.bntSortear.clicked.connect(self.sortearNumero)

        #Seção da janela principal
        self.setWindowTitle(self.title)
        self.setGeometry(self.top, self.left, self.width, self.height)
        self.setWindowIcon(QtGui.QIcon("user.png"))
        self.show()

    def setValorLcd(self, n):

        if (n == 1):
            self.lcdPlacar1.display(self.spinBox.value())
            self.valorPlacarA = self.spinBox.value()

        if (n == 2):
            self.lcdPlacar2.display(self.spinBox.value())
            self.valorPlacarB = self.spinBox.value()

        def placarColor(valorPlacarA, valorPlacarB):
            if (valorPlacarA > valorPlacarB):
                self.lcdPlacar1.setStyleSheet(
                    'QLCDNumber {background-color: #3FC380; color: white; font: bold}'
                )

            if (valorPlacarB > valorPlacarA):
                self.lcdPlacar2.setStyleSheet(
                    'QLCDNumber {background-color: #3FC380; color: white; font: bold}'
                )

            if (valorPlacarA < valorPlacarB):
                self.lcdPlacar1.setStyleSheet(
                    'QLCDNumber {background-color: #F22613; color: white; font: bold}'
                )

            if (valorPlacarB < valorPlacarA):
                self.lcdPlacar2.setStyleSheet(
                    'QLCDNumber {background-color: #F22613; color: white; font: bold}'
                )

            if (valorPlacarA == valorPlacarB):
                self.lcdPlacar1.setStyleSheet(
                    'QLCDNumber {background-color: #22A7F0; color: white; font: bold}'
                )
                self.lcdPlacar2.setStyleSheet(
                    'QLCDNumber {background-color: #22A7F0; color: white; font: bold}'
                )

        placarColor(self.valorPlacarA, self.valorPlacarB)

    def bntIniciarCronoState(self):
        i = 0
        if (self.bntIniciarCrono.isChecked()):
            i += 1
            return i
        return i

    def threadCrono(self):
        global stop
        stop = 0
        bntCronoStatus = self.bntIniciarCronoState()

        if (bntCronoStatus == 1):
            self.t = threading.Thread(target=self.iniciarCrono)
            self.bntIniciarCrono.setText('PARAR')
            self.t.start()

        if (bntCronoStatus == 0):
            self.bntIniciarCrono.setText('Iniciar novamente')
            stop = -1

    def iniciarCrono(self):

        self.seg = self.cronoWindow.getValueSpinSeg()
        self.min = self.cronoWindow.getValueSpinMin()

        self.count = 0
        self.i = self.seg + (self.min * 60)

        while (self.i != 0):
            self.min = self.count / 60
            self.seg = self.count % 60 + 1
            time.sleep(1)
            self.labelCrono.setText('%02d:%02d' % (self.min, self.seg))
            self.count += 1
            self.i -= 1

            if stop == -1:
                self.bntIniciarCrono.setText('Iniciar novamente')
                self.i = 0

    def sortearNumero(self):
        try:
            a = self.spinBoxNumb1.value()
            b = self.spinBoxNumb2.value()
            self.resultado = randint(a, b)
            self.msgResultado = QMessageBox()
            self.msgResultado.setStyleSheet(
                'QMessageBox, QMessageBox QLabel {font: 35px; color: white; background-color:#34495E}'
            )
            self.msgResultado.information(
                self.msgResultado, 'INFORMAÇÃO ',
                'Número sorteado:  \n-->{:>7}        <--'.format(
                    self.resultado))
        except ValueError:
            self.warningValue = QMessageBox()
            self.warningValue.setStyleSheet(
                'QMessageBox, QMessageBox QLabel {font: bold; color: white; font: 25px; background-color: #D91E18;}'
            )
            self.warningValue.warning(
                self.warningValue, 'Aviso',
                'Entrada incorreta! \n 1 até 0 é inválido')

    def configCronometro(self):
        print('Inciando cronometro')
        self.cronoWindow = Cronometro()
        self.cronoWindow.show()
Ejemplo n.º 19
0
class QuickDraw(QMainWindow):
    def __init__(self, classes, model):

        super().__init__()

        self.num_tests = 3
        self.items = random.sample(classes, self.num_tests)
        self.turn = 0

        self.correct_pred = 0
        self.pred_name = ''

        col = QColor(200, 200, 50)
        self.setStyleSheet("QWidget { background-color: %s }" % col.name())

        self.back_color = QColor(50, 200, 200)

        self.start_button = QPushButton('Start', self)
        self.start_button.setGeometry(875, 1120, 100, 100)

        self.start_button.clicked.connect(self.doAction)

        self.quit_button = QPushButton('Quit', self)
        self.quit_button.setGeometry(875, 1250, 100, 100)

        self.quit_button.clicked.connect(self.quit_pressed)

        self.color_button = QPushButton('Color', self)
        self.color_button.setGeometry(900, 70, 100, 100)

        self.color_button.clicked.connect(self.showDialog)

        self.restart_button = QPushButton('Restart', self)
        self.restart_button.setGeometry(750, 1120, 100, 100)

        self.restart_button.clicked.connect(self.restart)

        self.next_button = QPushButton('Next', self)
        self.next_button.setGeometry(750, 1250, 100, 100)

        self.next_button.clicked.connect(self.next)

        self.setGeometry(800, 200, 1024, 1400)
        self.setWindowTitle('Quick Draw')
        self.setWindowIcon(QIcon('Icon/paint.png'))

        self.Image = QImage(1024, 1024, QImage.Format_RGB32)
        self.Image.fill(self.back_color)

        self.start_flag = False
        self.drawing = False
        self.brush_size = 20
        self.brush_color = Qt.black
        self.moving = False
        self.stroke = [[], []]
        self.strokes = []
        self.xs = []
        self.ys = []

        self.last_point = QPoint()

        main_menu = self.menuBar()
        file_menu = main_menu.addMenu("File")

        save_action = QAction(QIcon('Icon/save.png'), 'Save', self)
        save_action.setShortcut('Ctrl+S')
        file_menu.addAction(save_action)
        save_action.triggered.connect(self.save)

        clear_action = QAction(QIcon('Icon/clear.png'), 'Clear', self)
        clear_action.setShortcut('Ctrl+C')
        file_menu.addAction(clear_action)
        clear_action.triggered.connect(self.clear)

        self.lcd = QLCDNumber(self)
        self.lcd.setGeometry(50, 1270, 300, 80)

        font = QFont()
        font.setBold(True)
        font.setPointSize(8)

        self.label = QLabel('Remaining Time:', self)
        self.label.setGeometry(50, 1200, 300, 40)
        # self.label.setAlignment(Qt.AlignCenter)

        self.label2 = QLabel('Draw : {0} '.format(self.items[self.turn]), self)
        self.label2.setGeometry(50, 1130, 350, 40)
        # self.label2.setAlignment(Qt.AlignLeft)

        self.label3 = QLabel('Prediction : None', self)
        self.label3.setGeometry(50, 1060, 400, 40)
        # self.label3.setAlignment(Qt.AlignLeft)
        self.label3.setFont(font)

        self.label4 = QLabel(
            'Correct Predictions\n{0}/{1}'.format(self.correct_pred,
                                                  self.num_tests), self)
        self.label4.setGeometry(350, 1115, 350, 100)
        self.label4.setAlignment(Qt.AlignCenter)
        self.label4.setFont(font)

        self.seconds = 30
        self.milliseconds = 0

        self.timer = QTimer(self)
        self.timer.setInterval(10)
        self.timer.start()
        self.timer.timeout.connect(self.showTime)

        self.timer2 = QTimer(self)
        self.timer2.setInterval(10)
        self.timer2.start()
        # self.timer2.timeout.connect(self.predict)
        self.pred_sec = 0

    def closeEvent(self, event):

        reply = QMessageBox.question(self, 'Message', 'Are you sure to quit?',
                                     QMessageBox.Yes | QMessageBox.No,
                                     QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

    def quit_pressed(self):

        reply = QMessageBox.question(self, 'Message', 'Are you sure to quit?',
                                     QMessageBox.Yes | QMessageBox.No,
                                     QMessageBox.No)
        if reply == QMessageBox.Yes:
            qApp.quit()

    def mousePressEvent(self, event):

        if event.button() == Qt.LeftButton:
            self.drawing = True
            self.last_point = event.pos()

    def mouseMoveEvent(self, event):

        if (event.buttons() & Qt.LeftButton) & self.drawing & self.start_flag:
            painter = QPainter(self.Image)
            painter.setPen(
                QPen(self.brush_color, self.brush_size, Qt.SolidLine,
                     Qt.RoundCap, Qt.RoundJoin))
            painter.drawLine(self.last_point, event.pos())
            self.last_point = event.pos()
            self.xs.append(event.x())
            self.ys.append(event.y())
            self.stroke[0].append(event.x())
            self.stroke[1].append(event.y())
            self.moving = True
            self.update()

    def mouseReleaseEvent(self, event):

        if (event.button() == Qt.LeftButton) & self.moving:
            self.drawing = False
            self.moving = False
            self.strokes.append(self.stroke)
            self.stroke = [[], []]
            strokes = self.cropsize(self.xs, self.ys, self.strokes)
            raster = vector_to_raster(strokes)
            image = raster[0].reshape(28, 28)
            tfms = transforms.Compose([
                transforms.ToPILImage(),
                transforms.Resize((56, 56)),
                transforms.ToTensor(),
                transforms.Normalize((0.5, ), (1.0, ))
            ])
            t_image = tfms(image)
            tens_image = torch.empty((1, 1, 56, 56))
            tens_image[0] = t_image
            # plt.imshow(tens_image[0,0])
            # plt.show()
            output = model(tens_image)
            _, pred = torch.max(output.data, 1)
            print(output.data)
            print(classes[pred])
            self.label3.setText('Predict : {0}'.format(classes[pred]))
            if classes[pred] == self.items[self.turn]:
                if self.pred_name != classes[pred]:
                    self.pred_name = classes[pred]
                    self.correct_pred = self.correct_pred + 1
                    self.label4.setText('Correct Predictions\n{0}/{1}'.format(
                        self.correct_pred, self.num_tests))
                self.doAction()
                reply = QMessageBox.question(
                    self, 'Message',
                    'Oh, I know! That\'s {0}. '.format(classes[pred]),
                    QMessageBox.Ok, QMessageBox.Ok)
                self.doAction()

    def paintEvent(self, event):
        canvasPainter = QPainter(self)
        canvasPainter.drawImage(self.Image.rect(), self.Image,
                                self.Image.rect())

    def doAction(self):

        if self.start_flag:
            self.start_flag = False
            self.start_button.setText('Start')
        else:
            self.start_flag = True
            self.start_button.setText('Pause')

    def save(self):

        file_path, _ = QFileDialog.getSaveFileName(
            self, 'Save Image', '',
            'PNG(*.png);;JPG(*.jpg *.jpeg);;All Files(*.*)')
        if file_path == "":
            return
        self.Image.save(file_path)

    def clear(self):

        self.Image.fill(self.back_color)
        self.strokes = []
        self.xs = []
        self.ys = []
        self.update()

    def showTime(self):

        if not self.start_flag:
            return

        if self.milliseconds < 10:
            time = '{0}:0{1}'.format(self.seconds, self.milliseconds)
        else:
            time = '{0}:{1}'.format(self.seconds, self.milliseconds)
        self.lcd.display(time)

        if (self.seconds == 0) & (self.milliseconds == 0):
            self.seconds = 30
            self.doAction()
            self.turn = self.turn + 1
            if self.turn == self.num_tests:
                reply = QMessageBox.question(
                    self, 'The End', 'Do You Want to Play a new Game?',
                    QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
                if reply == QMessageBox.Yes:
                    self.restart()
                if reply == QMessageBox.No:
                    qApp.quit()

            self.label2.setText('Draw : {0} '.format(self.items[self.turn]))
            self.label3.setText('Predict : None')
            self.Image.fill(self.back_color)
            self.strokes = []
            self.xs = []
            self.ys = []
            self.update()
            return

        if self.milliseconds == 0:
            self.milliseconds = 99
            self.seconds = self.seconds - 1
            return

        self.milliseconds = self.milliseconds - 1

    def showDialog(self):

        self.back_color = QColorDialog.getColor()
        self.strokes = []
        self.xs = []
        self.ys = []

        if self.back_color.isValid():
            self.Image.fill(self.back_color)

    def restart(self):

        self.start_flag = True
        self.doAction()
        self.drawing = False
        self.brush_size = 20
        self.brush_color = Qt.black
        self.correct_pred = 0
        self.pred_name = ''
        self.moving = False
        self.stroke = [[], []]
        self.strokes = []
        self.xs = []
        self.ys = []
        self.last_point = QPoint()
        self.seconds = 30
        self.milliseconds = 0
        self.clear()
        self.items = random.sample(classes, self.num_tests)
        self.turn = 0
        self.label4.setText('Correct Predictions\n{0}/{1}'.format(
            self.correct_pred, self.num_tests))
        self.label2.setText('Draw : {0} '.format(self.items[self.turn]))
        self.label3.setText('Predict : None')
        time = '{0}:0{1}'.format(self.seconds, self.milliseconds)
        self.lcd.display(time)

    def next(self):

        self.start_flag = True
        self.doAction()
        self.drawing = False
        self.brush_size = 20
        self.brush_color = Qt.black
        self.moving = False
        self.stroke = [[], []]
        self.strokes = []
        self.xs = []
        self.ys = []
        self.last_point = QPoint()
        self.seconds = 30
        self.milliseconds = 0
        self.clear()
        self.turn = self.turn + 1
        if self.turn == self.num_tests:
            reply = QMessageBox.question(self, 'The End',
                                         'Do You Want to Play a new Game?',
                                         QMessageBox.Yes | QMessageBox.No,
                                         QMessageBox.Yes)
            if reply == QMessageBox.Yes:
                self.restart()
            if reply == QMessageBox.No:
                qApp.quit()

        self.label2.setText('Draw : {0} '.format(self.items[self.turn]))
        self.label3.setText('Predict : None')
        time = '{0}:0{1}'.format(self.seconds, self.milliseconds)
        self.lcd.display(time)

    def cropsize(self, x, y, strokes):

        margin = 10

        x_min = min(x)
        if x_min >= margin:
            x_min = x_min - margin
        else:
            x_min = 0

        x_max = max(x)
        if x_max + margin <= 1024:
            x_max = x_max + margin
        else:
            x_max = 1024

        y_min = min(y)
        if y_min >= margin:
            y_min = y_min - margin
        else:
            y_min = 0

        y_max = max(y)
        if y_max + margin <= 1024:
            y_max = y_max + margin
        else:
            y_max = 1024

        height = y_max - y_min
        width = x_max - x_min

        if height > width:
            crop_size = height
        else:
            crop_size = width

        # print(crop_size)
        crop_factor = crop_size / 256.
        # print(crop_factor)
        out_strokes = []
        for stroke in strokes:
            print(stroke)
            print(x_min)
            print(y_min)
            np_stroke = (np.array(stroke) - [[x_min], [y_min]]) // crop_factor
            list_stroke = np_stroke.tolist()
            out_strokes.append(list_stroke)

        return out_strokes
Ejemplo n.º 20
0
class UiGameFrame(QFrame):
    def __init__(self, parent):
        super(UiGameFrame, self).__init__(parent)
        self.setupUi()

    def setupUi(self):

        # 游戏界面
        self.setGeometry(QRect(10, 10, 671, 711))
        # self.setStyleSheet("background-image: url(./img/bg.bmp);")
        self.setFrameShape(QFrame.Box)
        self.setFrameShadow(QFrame.Sunken)
        self.setLineWidth(2)
        self.setObjectName("uiGameFrame")

        # 房间信息
        self.game_info = QLabel(self)
        self.game_info.setGeometry(QRect(20, 5, 631, 40))
        self.game_info.setObjectName("gameInfo")
        self.game_info.setScaledContents(True)
        self.game_info.setStyleSheet(
            'font-size:20px;font-weight:bold;')
        self.game_info.setAlignment(Qt.AlignCenter | Qt.AlignTop)

        # 游戏画面
        self.game_frame = QFrame(self)
        self.game_frame.setGeometry(QRect(80, 145, 504, 504))
        # self.game_frame.setStyleSheet("background-image: url(./img/game.bmp);")
        self.game_frame.setFrameShape(QFrame.Box)
        self.game_frame.setFrameShadow(QFrame.Plain)
        self.game_frame.setObjectName("gameFrame")

        # 对战
        self.vs_frame = QFrame(self)
        self.vs_frame.setGeometry(QRect(50, 55, 270, 80))
        self.vs_frame.setFrameShape(QFrame.StyledPanel)
        self.vs_frame.setFrameShadow(QFrame.Raised)
        self.vs_frame.setObjectName("vsFrame")
        # self.vs_frame.setStyleSheet("border:1px solid;")

        self.vs_user_image = QLabel(self.vs_frame)
        self.vs_user_image.setGeometry(QRect(5, 5, 70, 70))
        self.vs_user_image.setObjectName("vsUserImage")
        self.vs_user_image.setScaledContents(True)

        self.vs_user_info = QLabel(self.vs_frame)
        self.vs_user_info.setGeometry(QRect(80, 5, 120, 70))
        self.vs_user_info.setObjectName("vsUserInfo")

        self.lcdNumber_l = QLCDNumber(self.vs_frame)
        self.lcdNumber_l.setGeometry(QRect(205, 5, 60, 70))
        self.lcdNumber_l.setLineWidth(0)
        self.lcdNumber_l.setDigitCount(2)
        self.lcdNumber_l.setSegmentStyle(QLCDNumber.Flat)
        self.lcdNumber_l.setProperty("intValue", 20)
        self.lcdNumber_l.setObjectName("lcdNumber_2")

        self.vs_frame_r = QFrame(self)
        self.vs_frame_r.setGeometry(QRect(350, 55, 270, 80))
        self.vs_frame_r.setFrameShape(QFrame.StyledPanel)
        self.vs_frame_r.setFrameShadow(QFrame.Raised)
        self.vs_frame_r.setObjectName("vsFrameR")
        # self.vs_frame_r.setStyleSheet("border:1px solid;")

        self.lcdNumber_r = QLCDNumber(self.vs_frame_r)
        self.lcdNumber_r.setGeometry(QRect(5, 5, 60, 70))
        self.lcdNumber_r.setLineWidth(0)
        self.lcdNumber_r.setDigitCount(2)
        self.lcdNumber_r.setSegmentStyle(QLCDNumber.Flat)
        self.lcdNumber_r.setProperty("intValue", 20)
        self.lcdNumber_r.setObjectName("lcdNumber_3")

        self.vs_user_image_r = QLabel(self.vs_frame_r)
        self.vs_user_image_r.setGeometry(QRect(70, 5, 70, 70))
        self.vs_user_image_r.setObjectName("vsUserImageR")
        self.vs_user_image_r.setScaledContents(True)

        self.vs_user_info_r = QLabel(self.vs_frame_r)
        self.vs_user_info_r.setGeometry(QRect(145, 5, 120, 70))
        self.vs_user_info_r.setObjectName("vsUserInfoR")

        # 按钮区域
        self.cmd_frame = QFrame(self)
        self.cmd_frame.setGeometry(QRect(55, 655, 560, 47))
        self.cmd_frame.setFrameShape(QFrame.StyledPanel)
        self.cmd_frame.setFrameShadow(QFrame.Raised)
        self.cmd_frame.setObjectName("cmdFrame")
        # 开始按钮
        self.gameStartBtn = QPushButton(self.cmd_frame)
        self.gameStartBtn.setGeometry(QRect(10, 10, 100, 27))
        self.gameStartBtn.setObjectName("gameStartBtn")

        # 悔棋按钮
        self.gameUndoBtn = QPushButton(self.cmd_frame)
        self.gameUndoBtn.setGeometry(QRect(120, 10, 100, 27))
        self.gameUndoBtn.setObjectName("gameUndoBtn")

        # 认输按钮
        self.gameGiveupBtn = QPushButton(self.cmd_frame)
        self.gameGiveupBtn.setGeometry(QRect(230, 10, 100, 27))
        self.gameGiveupBtn.setObjectName("gameGiveupBtn")

        # 返回大厅
        self.gameReHallBtn = QPushButton(self.cmd_frame)
        self.gameReHallBtn.setGeometry(QRect(340, 10, 100, 27))
        self.gameReHallBtn.setObjectName("gameReHallBtn")

        # 设置
        self.gameSetBtn = QPushButton(self.cmd_frame)
        self.gameSetBtn.setGeometry(QRect(450, 10, 100, 27))
        self.gameSetBtn.setObjectName("gameSetBtn")

        self.retranslateUi()
        QMetaObject.connectSlotsByName(self)

    def retranslateUi(self):
        _translate = QCoreApplication.translate
        self.gameStartBtn.setText(_translate("MainWindow", "开始游戏"))
        self.gameUndoBtn.setText(_translate("MainWindow", "悔棋"))
        self.gameGiveupBtn.setText(_translate("MainWindow", "认输"))
        self.gameReHallBtn.setText(_translate("MainWindow", "返回大厅"))
        self.gameSetBtn.setText(_translate("MainWindow", "设置"))
Ejemplo n.º 21
0
class Trigan_Result_Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        global COUNT_TRUES_EQUATIONS, begin
        global COUNT_TRIES_EQUATIONS

        self.f_r = open("info", mode='r')
        self.frm = QFrame(self)
        self.frm.setStyleSheet("QWidget { background-color: %s }" %
                               self.f_r.read(7))
        self.frm.setGeometry(0, 0, 2000, 1000)

        self.setGeometry(500, 300, 400, 200)
        self.setWindowTitle('Результаты работы')

        self.lcdNumber = QLCDNumber(self)
        self.lcdNumber.setGeometry(QtCore.QRect(0, 0, 80, 35))
        self.lcdNumber.move(300, 10)
        self.lcdNumber.setNumDigits(5)
        self.str1 = "{:0>2d}:{:0>2d}".format(begin // 60, begin % 60)
        self.lcdNumber.display(self.str1)

        self.result_label = QLabel(self)
        self.result_label.setText(
            f"Ваш результат: {COUNT_TRUES_EQUATIONS} из {COUNT_TRIES_EQUATIONS}"
        )
        self.result_label.setFont(
            QtGui.QFont("Currently only TrueType fonts", 14))
        self.result_label.resize(300, 50)
        self.result_label.move(70, 70)
        self.f_r.seek(14)
        self.result_label.setStyleSheet("QLabel {color: %s;}" %
                                        self.f_r.read(7))
        COUNT_TRIES_EQUATIONS = 0
        COUNT_TRUES_EQUATIONS = 0

        begin = 0

        self.back_btn = QPushButton('← Меню', self)
        self.back_btn.resize(90, 30)
        self.back_btn.move(10, 160)
        self.f_r.seek(7)
        self.back_btn.setStyleSheet(
            "QPushButton { background-color: %s; border: %s; color: %s}" %
            (self.f_r.read(7), None, self.f_r.read(7)))

        self.qu_btn = QPushButton('↺ Заново', self)
        self.qu_btn.resize(90, 30)
        self.qu_btn.move(110, 160)
        self.f_r.seek(7)
        self.qu_btn.setStyleSheet(
            "QPushButton { background-color: %s; border: %s; color: %s}" %
            (self.f_r.read(7), None, self.f_r.read(7)))
        self.f_r.close()

        self.back_btn.clicked.connect(self.back)
        self.qu_btn.clicked.connect(self.ques)

    def back(self):
        self.back_form = MainMenu()
        self.back_form.show()
        self.close()

    def ques(self):
        self.ques_form = Trigan_Window()
        self.ques_form.show()
        self.close()
Ejemplo n.º 22
0
class ControlWindow(QWidget):
    
    #Initialize the class (actually creating a initUI method and calling that, or just put all that code in here)
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        #Primary screen - Control Window Screen (laptop) - Screen0 will always be primary screen (only screen on RPi)
        self.sizeScreen0 = QDesktopWidget().screenGeometry(0)   #use this function to get the screen geometry
        print('  Screen 0 size : ' + str(self.sizeScreen0.height()) + 'x' + str(self.sizeScreen0.width()))
        #Print out the screen size for debugging issues, will display in terminal

        self.setGeometry(0, 0, self.sizeScreen0.width(), self.sizeScreen0.height())  #set window screen dimensions
        self.setWindowTitle('Control Panel')  #name window screen (displayed at top of window)

        #Create a button - same format for any button you want to make
        self.Zero_button = QPushButton(self) #declare the button instance from the QPushbutton class
        # set the button position and size .setgeometry(Qrect(X position, Y position, button width, button height)) position is from upper left of button
        # The button position and dimensions are relative to the screen size. You can type in absolute numbers instead if you want and are sure of screensize
        self.Zero_button.setGeometry(QRect(self.sizeScreen0.width() * 0.015, self.sizeScreen0.height() * 0.02, self.sizeScreen0.width() * 0.165, self.sizeScreen0.height() * 0.12))
        self.Zero_button.setObjectName("Zero_button")  #name the button
        self.Zero_button.setStyleSheet("font: bold 14px; background-color: rgb(5,176,36);")

        self.Weight_button = QPushButton(self)
        self.Weight_button.setGeometry(QRect(self.sizeScreen0.width() * 0.2, self.sizeScreen0.height() * 0.02, self.sizeScreen0.width() * 0.165, self.sizeScreen0.height() * 0.12))
        self.Weight_button.setObjectName("Weight_button")
        self.Weight_button.setStyleSheet("font: bold 14px; background-color: rgb(5,176,36);")
            
        self.Estop_button = QPushButton(self)
        self.Estop_button.setGeometry(QRect(self.sizeScreen0.width() * 0.74, self.sizeScreen0.height() * 0.02, self.sizeScreen0.width() * 0.2, self.sizeScreen0.height() * 0.12))
        self.Estop_button.setObjectName("Estop_button")
        self.Estop_button.setStyleSheet("font: bold 14px; background-color: red;")
        
        self.Start_button = QPushButton(self)
        self.Start_button.setGeometry(QRect(self.sizeScreen0.width() * 0.825, self.sizeScreen0.height() * 0.61, self.sizeScreen0.width() * 0.15, self.sizeScreen0.height() * 0.15))
        self.Start_button.setObjectName("Start_button")
        self.Start_button.setStyleSheet("font: bold 14px; background-color: rgb(5,176,36);")
        
        #Create another button (same process as before)
        self.Close_button = QPushButton(self)
        self.Close_button.setGeometry(QRect(self.sizeScreen0.width() * 0.95, self.sizeScreen0.height() * 0.01, self.sizeScreen0.width() * 0.04, self.sizeScreen0.height() * 0.06))
        self.Close_button.setObjectName("X_button")
        self.Close_button.setStyleSheet("font: bold 18px; background-color: rgb(5,176,36);")

        #Creates GUI user inputs
        self.InitialSampleWeight = QLineEdit(self)
        self.InitialSampleWeight.setGeometry(QRect(self.sizeScreen0.width() * 0.2, self.sizeScreen0.height() * 0.8, self.sizeScreen0.width() * 0.09, self.sizeScreen0.height() * 0.1))
        self.InitialSampleWeight.setStyleSheet("font: bold 20px;")
        self.InitialSampleWeight.setMaxLength(5)
     
        self.DryMatterWeight = QLineEdit(self)
        self.DryMatterWeight.setGeometry(QRect(self.sizeScreen0.width() * 0.5, self.sizeScreen0.height() * 0.8, self.sizeScreen0.width() * 0.09, self.sizeScreen0.height() * 0.1))
        self.DryMatterWeight.setStyleSheet("font: bold 20px;")
        self.DryMatterWeight.setMaxLength(5)
        
        self.TargetWeightPercent = QLineEdit(self)
        self.TargetWeightPercent.setGeometry(QRect(self.sizeScreen0.width() * 0.8, self.sizeScreen0.height() * 0.8, self.sizeScreen0.width() * 0.09, self.sizeScreen0.height() * 0.1))
        self.TargetWeightPercent.setStyleSheet("font: bold 20px;")
        self.TargetWeightPercent.setMaxLength(5)
        
        self.EStopTemp = QLineEdit(self)
        self.EStopTemp.setGeometry(QRect(self.sizeScreen0.width() * 0.86, self.sizeScreen0.height() * 0.3, self.sizeScreen0.width() * 0.09, self.sizeScreen0.height() * 0.1))
        self.EStopTemp.setStyleSheet("font: bold 20px;")
        self.EStopTemp.setMaxLength(5)
        
        self.EStopTemp_label = QLabel(self)
        self.EStopTemp_label.setGeometry(QRect(self.sizeScreen0.width() * 0.815, self.sizeScreen0.height() * 0.20, self.sizeScreen0.width() * 0.3, self.sizeScreen0.height() * 0.1))
        self.EStopTemp_label.setStyleSheet("font: bold 15px;")
        
        self.SampleWeight_label = QLabel(self)
        self.SampleWeight_label.setGeometry(QRect(self.sizeScreen0.width() * 0.05, self.sizeScreen0.height() * 0.8, self.sizeScreen0.width() * 0.15, self.sizeScreen0.height() * 0.1))
        self.SampleWeight_label.setStyleSheet("font: bold 15px;")
        
        self.DryMatter_label = QLabel(self)
        self.DryMatter_label.setGeometry(QRect(self.sizeScreen0.width() * 0.37, self.sizeScreen0.height() * 0.8, self.sizeScreen0.width() * 0.13, self.sizeScreen0.height() * 0.1))
        self.DryMatter_label.setStyleSheet("font: bold 15px;")
        
        self.TargetPercent_label = QLabel(self)
        self.TargetPercent_label.setGeometry(QRect(self.sizeScreen0.width() * 0.63, self.sizeScreen0.height() * 0.8, self.sizeScreen0.width() * 0.165, self.sizeScreen0.height() * 0.1))
        self.TargetPercent_label.setStyleSheet("font: bold 15px;")       

        self.Top_label = QLabel(self)
        self.Top_label.setGeometry(QRect(self.sizeScreen0.width() * 0.1, self.sizeScreen0.height() * 0.125, self.sizeScreen0.width() * 0.3, self.sizeScreen0.height() * 0.3))
        self.Top_label.setStyleSheet("font: bold 20px;")

        self.Middle_label = QLabel(self)
        self.Middle_label.setGeometry(QRect(self.sizeScreen0.width() * 0.1, self.sizeScreen0.height() * 0.325, self.sizeScreen0.width() * 0.3, self.sizeScreen0.height() * 0.3))
        self.Middle_label.setStyleSheet("font: bold 20px;")

        self.Bottom_label = QLabel(self)
        self.Bottom_label.setGeometry(QRect(self.sizeScreen0.width() * 0.1, self.sizeScreen0.height() * 0.525, self.sizeScreen0.width() * 0.3, self.sizeScreen0.height() * 0.3))
        self.Bottom_label.setStyleSheet("font: bold 20px;")

#        self.Progress_label = QLabel(self)
#        self.Progress_label.setGeometry(QRect(self.sizeScreen0.width() * 0.1, self.sizeScreen0.height() * 0.65, self.sizeScreen0.width() * 0.3, self.sizeScreen0.height() * 0.3))
#        self.Progress_label.setStyleSheet("font: bold 15px;")

        self.Weight_label = QLabel(self)
        self.Weight_label.setGeometry(QRect(self.sizeScreen0.width() * 0.34, self.sizeScreen0.height() * 0.05, self.sizeScreen0.width() * 0.3, self.sizeScreen0.height() * 0.3))
        self.Weight_label.setStyleSheet("font: bold 15px;")

        self.Moisture_label = QLabel(self)
        self.Moisture_label.setGeometry(QRect(self.sizeScreen0.width() * 0.59, self.sizeScreen0.height() * 0.125, self.sizeScreen0.width() * 0.23, self.sizeScreen0.height() * 0.15))
        self.Moisture_label.setStyleSheet("font: bold 15px;")

        self.TopTemp_label = QLabel(self)
        self.TopTemp_label.setGeometry(QRect(self.sizeScreen0.width() * 0.41, self.sizeScreen0.height() * 0.03, self.sizeScreen0.width() * 0.22, self.sizeScreen0.height() * 0.05))
        self.TopTemp_label.setStyleSheet("font: bold 15px;")

        self.BottomTemp_label = QLabel(self)
        self.BottomTemp_label.setGeometry(QRect(self.sizeScreen0.width() * 0.41, self.sizeScreen0.height() * 0.105, self.sizeScreen0.width() * 0.25, self.sizeScreen0.height() * 0.05))
        self.BottomTemp_label.setStyleSheet("font: bold 15px;")

        #Create an LCD display widget to show numbers
        self.LCDdisplay = QLCDNumber(self)  #Create the instance from the QLCDNumber class
        #Set the position and dimensions just like was done for the buttons
        self.LCDdisplay.setGeometry(QRect(self.sizeScreen0.width() * 0.935, self.sizeScreen0.height() * 0.8, self.sizeScreen0.width() * 0.06, self.sizeScreen0.height() * 0.12))
        self.LCDdisplay.setObjectName("Counter")  #Name it
        self.LCDdisplay.setStyleSheet("background-color:white;")

        self.TopTempdisplay = QLCDNumber(self)
        self.TopTempdisplay.setGeometry(QRect(self.sizeScreen0.width() * 0.62, self.sizeScreen0.height() * 0.025, self.sizeScreen0.width() * 0.1, self.sizeScreen0.height() * 0.06))
        self.TopTempdisplay.setObjectName("Top Temperature")
        self.TopTempdisplay.setStyleSheet("background-color:white;")

        self.BottomTempdisplay = QLCDNumber(self)
        self.BottomTempdisplay.setGeometry(QRect(self.sizeScreen0.width() * 0.62, self.sizeScreen0.height() * 0.1, self.sizeScreen0.width() * 0.1, self.sizeScreen0.height() * 0.06))
        self.BottomTempdisplay.setObjectName("Bottom Temperature")
        self.BottomTempdisplay.setStyleSheet("background-color:white;")

        self.TopWeightdisplay = QLCDNumber(self)
        self.TopWeightdisplay.setGeometry(QRect(self.sizeScreen0.width() * 0.3, self.sizeScreen0.height() * 0.22, self.sizeScreen0.width() * 0.2, self.sizeScreen0.height() * 0.12))
        self.TopWeightdisplay.setObjectName("Top Weight")
        self.TopWeightdisplay.setStyleSheet("background-color:white;")

        self.TopMoisturedisplay = QLCDNumber(self)
        self.TopMoisturedisplay.setGeometry(QRect(self.sizeScreen0.width() * 0.6, self.sizeScreen0.height() * 0.22, self.sizeScreen0.width() * 0.2, self.sizeScreen0.height() * 0.12))
        self.TopMoisturedisplay.setObjectName("Top Moisture")
        self.TopMoisturedisplay.setStyleSheet("background-color:white;")

        self.MiddleWeightdisplay = QLCDNumber(self)
        self.MiddleWeightdisplay.setGeometry(QRect(self.sizeScreen0.width() * 0.3, self.sizeScreen0.height() * 0.42, self.sizeScreen0.width() * 0.2, self.sizeScreen0.height() * 0.12))
        self.MiddleWeightdisplay.setObjectName("Middle Weight")
        self.MiddleWeightdisplay.setStyleSheet("background-color:white;")

        self.MiddleMoisturedisplay = QLCDNumber(self)
        self.MiddleMoisturedisplay.setGeometry(QRect(self.sizeScreen0.width() * 0.6, self.sizeScreen0.height() * 0.42, self.sizeScreen0.width() * 0.2, self.sizeScreen0.height() * 0.12))
        self.MiddleMoisturedisplay.setObjectName("Middle Moisture")
        self.MiddleMoisturedisplay.setStyleSheet("background-color:white;")

        self.BottomWeightdisplay = QLCDNumber(self)
        self.BottomWeightdisplay.setGeometry(QRect(self.sizeScreen0.width() * 0.3, self.sizeScreen0.height() * 0.62, self.sizeScreen0.width() * 0.2, self.sizeScreen0.height() * 0.12))
        self.BottomWeightdisplay.setObjectName("Bottom Weight")
        self.BottomWeightdisplay.setStyleSheet("background-color:white;")

        self.BottomMoisturedisplay = QLCDNumber(self)
        self.BottomMoisturedisplay.setGeometry(QRect(self.sizeScreen0.width() * 0.6, self.sizeScreen0.height() * 0.62, self.sizeScreen0.width() * 0.2, self.sizeScreen0.height() * 0.12))
        self.BottomMoisturedisplay.setObjectName("Bottom Moisture")
        self.BottomMoisturedisplay.setStyleSheet("background-color:white;")

#        self.Progress_bar = QProgressBar(self)
#        self.Progress_bar.setGeometry(QRect(self.sizeScreen0.width() * 0.1, self.sizeScreen0.height() * 0.83, self.sizeScreen0.width() * 0.7, self.sizeScreen0.height() * 0.04))
#        self.Progress_bar.setRange(0,100)
#        #loop = 60
#        #self.Progress_bar.setValue(loop)
#        self.Progress_bar.setStyleSheet("font: bold 15px; text-align: center; border: 1px solid grey;")

        #Not exactly sure what this does, but it is needed to put a name label on the buttons
        _translate = QCoreApplication.translate

        #Name the Close Button label
        self.Close_button.setText(_translate("ControlWindow", "X"))
        #Name the calibrate button label
        self.Zero_button.setText(_translate("ControlWindow", "Zero All Scales"))

        self.Weight_button.setText(_translate("ControlWindow", "Set Initial"+ "\n" +"Weights"))

        self.Estop_button.setText(_translate("ControlWindow", "Emergency" + "\n" + "Shutoff"))
        
        self.Start_button.setText(_translate("ControlWindow", "Start/Resume"))
        
        self.Top_label.setText(_translate("ControlWindow", "Top Shelf:"))

        self.Middle_label.setText(_translate("ControlWindow", "Middle Shelf:"))

        self.Bottom_label.setText(_translate("ControlWindow", "Bottom Shelf:"))

        #self.Progress_label.setText(_translate("ControlWindow", "Drying Progress:"))

        self.Weight_label.setText(_translate("ControlWindow", "Weight (lbs):"))

        self.Moisture_label.setText(_translate("ControlWindow", "Moisture Percent (%):"))

        self.TopTemp_label.setText(_translate("ControlWindow", "Temperature 1 (F):"))

        self.BottomTemp_label.setText(_translate("ControlWindow", "Temperature 2 (F):"))
        
        self.SampleWeight_label.setText(_translate("ControlWindow", "Initial Sample"+ "\n" +"  Weight (g):"))
        
        self.DryMatter_label.setText(_translate("ControlWindow", "Dry Matter"+ "\n" +"Weight (g):"))
        
        self.TargetPercent_label.setText(_translate("ControlWindow", "Target Moisture"+ "\n" +"   Percent (%):"))
        
        self.EStopTemp_label.setText(_translate("ControlWindow", "         E-Stop"+ "\n" +"Temperature (F):"))

        #This sets the Close button's action when you click on it, in this case it will run the method "CloseUp" which is below
        self.Close_button.clicked.connect(self.CloseUp)
        #self.Close_button.clicked.connect(GPIOcleanup)
        
        #This activates E-stop when E-stop is pressed
        self.Estop_button.clicked.connect(Eshutoff)

        #This activates method "startup" when Start/Resume button is pressed
        self.Start_button.clicked.connect(startup)
        
        #Saves input values when start button pressed
        self.Start_button.clicked.connect(self.getInitialSampleWeight)
        self.Start_button.clicked.connect(self.getDryMatterWeight)
        self.Start_button.clicked.connect(self.getTargetWeightPercent)
        self.Start_button.clicked.connect(self.getEStopTemp)

        #This activates zeroing of the scales when "Zero" butotn is clicked
        self.Zero_button.clicked.connect(self.ZeroAllScales)
        
        #Records initial values when clicked
        self.Weight_button.clicked.connect(self.SetInitialWeights)

        #Show the screen, not sure it is really needed though
        self.show


    #Like before, not exactly sure what it is doing, but needed to create and show the button naming labels
    def retranslateUi(self, TestDisplay):
        _translate = QCoreApplication.translate
        TestDisplay.setWindowTitle(_translate("MainGroWin", "MainWindow"))
        self.Disconnect_button.setText(_translate("MainGroWin", "Disconnect"))

    #The function that will close the window and program when you click on the "Close" button
    def CloseUp(self):  #create method inside the ControlWindow Class (belongs to the ControlWindow class)
        # print('Closed')  #Used for debugging in terminal
        # Maximize the window, you can use the windowstate function to minimize, maximize and manipulate the window
        self.setWindowState(Qt.WindowMaximized)
        # Close up the window and shut it down
        self.close()
        GPIO.cleanup()
        Eshutoff()

    def ZeroAllScales(self): #setting offset of scales to current value so that scales are zeroed
        #REWRITE to create a list that updates every time button is pressed, so that offset is cumulative
        global zeroTop
        global zeroMid
        global zeroBot
        global listTop
        global listMid
        global listBot
        listTop.append(weightTop)
        listMid.append(weightMid)
        listBot.append(weightBot)
        zeroTop = sum(listTop)
        zeroMid = sum(listMid)
        zeroBot = sum(listBot)

    def SetInitialWeights(self): #saving current weights as "initial weights" when button is pressed
        global initialWeightTop

        global initialWeightMid
        global initialWeightBot
        initialWeightTop = weightTop
        initialWeightMid = weightMid
        initialWeightBot = weightBot

    #Function to update the LED value inside the counting display
    def updateLED(self, LEDnum):
        #update the LED value
        self.LEDvalue = LEDnum  #rename the variable for clarity
        self.LCDdisplay.display(self.LEDvalue) #use the display method of the LCDdisplay inhereited class to update the LED
            
#    def updateProgressBar (self, ProgressNum):
#        self.ProgressValue = ProgressNum
#        self.Progress_bar.setValue(self.ProgressValue)

    def updateTopTemp(self, TopTemp):  #method for updating temperature display
        self.TopTempValue = TopTemp
        self.TopTempdisplay.display(self.TopTempValue)
       
    def updateBotTemp(self, BotTemp):  #method for updating temperature display
        self.BotTempValue = BotTemp
        self.BottomTempdisplay.display(self.BotTempValue)

    def updateTopWeight(self, TopWeight):  #method for updating weight display
        self.TopWeightValue = TopWeight
        self.TopWeightdisplay.display(self.TopWeightValue)
                
    def updateMiddleWeight(self, MiddleWeight):  #method for updating weight display
        self.MiddleWeightValue = MiddleWeight
        self.MiddleWeightdisplay.display(self.MiddleWeightValue)
        
    def updateBottomWeight(self, BottomWeight):  #method for updating weight display
        self.BottomWeightValue = BottomWeight
        self.BottomWeightdisplay.display(self.BottomWeightValue)
        
    def updateTopMoistureDisplay(self, TopMoisture):  #method for updating moisture display
        self.TopMoistureValue = TopMoisture
        self.TopMoisturedisplay.display(self.TopMoistureValue)
                        
    def updateMiddleMoistureDisplay(self, MiddleMoisture):  #method for updating moisture display
        self.MiddleMoistureValue = MiddleMoisture
        self.MiddleMoisturedisplay.display(self.MiddleMoistureValue)
        
    def updateBottomMoistureDisplay(self, BottomMoisture):  #method for updating moisture display
        self.BottomMoistureValue = BottomMoisture
        self.BottomMoisturedisplay.display(self.BottomMoistureValue)
        
    def getInitialSampleWeight(self): #method for saving the values input in the boxes - made an attempt to convert to int or float as appropriate
        global initialSampleWeightTemp
        global initialSampleWeight
        if self.InitialSampleWeight.text() != "":
            initialSampleWeightTemp = self.InitialSampleWeight.text()
        try:
            initialSampleWeight = float(initialSampleWeightTemp)
        except:
            initialSampleWeight = int(initialSampleWeightTemp)
    
    def getEStopTemp(self):
        global EStopTemp
        global EStopTempTemp                
        if self.EStopTemp.text() != "":
            EStopTempTemp = self.EStopTemp.text()
        try:
            EStopTemp = float(EStopTempTemp)
        except:
            EStopTemp = int(EStopTempTemp)
        
    def getDryMatterWeight(self):   #method for saving the values input in the boxes - made an attempt to convert to int or float as appropriate
        global dryMatterTemp
        global dryMatter
        if self.DryMatterWeight.text() != "":
            dryMatterTemp = self.DryMatterWeight.text()
        try:
            dryMatter = float(dryMatterTemp)
        except:
            dryMatter = int(dryMatterTemp)
            
    def getTargetWeightPercent(self):   #method for saving the values input in the boxes - made an attempt to convert to int or float as appropriate
        global targetPercentTemp
        global targetPercent
        if self.TargetWeightPercent.text() != "":
            targetPercentTemp = self.TargetWeightPercent.text()
        try:
            targetPercent = float(targetPercentTemp)
        except:
            targetPercent = int(targetPercentTemp)         
Ejemplo n.º 23
0
class life(QMainWindow):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        '''initiates application UI'''
        self.tboard = Board(self)
        self.tboard.resize(720, 720)
        self.tboard.move(10, 10)

        # 开始按钮
        self.beginbutton = QPushButton(self)
        self.beginbutton.setGeometry(QRect(790, 70, 131, 51))
        self.beginbutton.setObjectName("beginbutton")
        self.beginbutton.clicked.connect(self.tboard.beginbuttonClicked)

        # 停止按钮
        self.stopbutton = QPushButton(self)
        self.stopbutton.setGeometry(QRect(790, 150, 131, 51))
        self.stopbutton.setObjectName("stopbutton")
        self.stopbutton.clicked.connect(self.tboard.stopbuttonClicked)

        self.groupBox = QGroupBox(self)
        self.groupBox.setGeometry(QRect(750, 270, 211, 391))
        self.groupBox.setObjectName("groupBox")

        # 窗口边长输入
        self.Nchanger = QLineEdit(self.groupBox)
        self.Nchanger.setGeometry(QRect(100, 80, 51, 21))
        self.Nchanger.setObjectName("Nchanger")
        self.Nchanger.setText("50")
        self.Nchanger.editingFinished.connect(self.editingFinished)

        # 密度滑动条lcd显示
        self.densitylcd = QLCDNumber(self.groupBox)
        self.densitylcd.setGeometry(QRect(130, 140, 64, 23))
        self.densitylcd.setObjectName("densitylcd")
        self.densitylcd.setDigitCount(3)
        self.densitylcd.setSegmentStyle(QLCDNumber.Flat)

        # 速度滑动条lcd显示
        self.speedlcd = QLCDNumber(self.groupBox)
        self.speedlcd.setGeometry(QRect(130, 230, 64, 23))
        self.speedlcd.setObjectName("speedlcd")
        self.speedlcd.setDigitCount(3)
        self.speedlcd.setSegmentStyle(QLCDNumber.Flat)

        # 密度滑动条
        self.horizontalSlider = QSlider(self.groupBox)
        self.horizontalSlider.setGeometry(QRect(30, 170, 160, 22))
        self.horizontalSlider.setOrientation(Qt.Horizontal)
        self.horizontalSlider.setObjectName("horizontalSlider")
        self.horizontalSlider.setMaximum(100)
        self.horizontalSlider.setMinimum(0)
        self.horizontalSlider.setValue(30)
        self.densitylcd.display(30)
        self.horizontalSlider.valueChanged.connect(self.densityvalueChanged)

        # 速度滑动条
        self.speedchanger = QSlider(self.groupBox)
        self.speedchanger.setGeometry(QRect(30, 260, 160, 22))
        self.speedchanger.setOrientation(Qt.Horizontal)
        self.speedchanger.setObjectName("speedchanger")
        self.speedchanger.setMaximum(600)
        self.speedchanger.setMinimum(15)
        self.speedchanger.setValue(200)
        self.speedlcd.display(415)
        self.speedchanger.valueChanged.connect(self.speedvalueChanged)

        # 控件名称定义
        self.label_2 = QLabel(self.groupBox)
        self.label_2.setGeometry(QRect(30, 80, 81, 21))
        self.label_2.setObjectName("label_2")
        self.label_3 = QLabel(self.groupBox)
        self.label_3.setGeometry(QRect(30, 140, 131, 21))
        self.label_3.setObjectName("label_3")
        self.label_4 = QLabel(self.groupBox)
        self.label_4.setGeometry(QRect(30, 230, 121, 21))
        self.label_4.setObjectName("label_4")
        _translate = QCoreApplication.translate
        self.beginbutton.setText(_translate("MainWindow", "开始"))
        self.stopbutton.setText(_translate("MainWindow", "停止"))
        self.groupBox.setTitle(_translate("MainWindow", "         参数设置"))
        self.label_2.setText(_translate("MainWindow", "图窗边长:"))
        self.label_3.setText(_translate("MainWindow", "初始细胞密度:"))
        self.label_4.setText(_translate("MainWindow", "演化速度:"))

        self.resize(980, 740)
        self.setFixedSize(980, 740)
        self.center()
        self.setWindowTitle('game of life')
        self.show()

    # 将窗口置于屏幕中央
    def center(self):
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move((screen.width() - size.width()) / 2,
                  (screen.height() - size.height()) / 2)

    # 密度滑动条移动时调用函数
    def densityvalueChanged(self):
        self.tboard.density = self.horizontalSlider.value() / 100
        self.densitylcd.display(self.horizontalSlider.value())

    # 速度滑动条移动时调用函数
    def speedvalueChanged(self):
        self.tboard.Speed = self.speedchanger.value()
        self.speedlcd.display(600 - self.speedchanger.value() + 15)

    # 窗口边长变化时调用函数
    def editingFinished(self):
        self.tboard.N = int(self.Nchanger.text())
Ejemplo n.º 24
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        self.newDetectionAvailable = False
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(820, 620)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.dropdown_menu = QComboBox(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(20)
        self.dropdown_menu.setFont(font)
        self.dropdown_menu.setGeometry(QtCore.QRect(540, 540, 240, 50))
        self.robot_index = 0
        for name_ip in NAME_IP_LIST:
            text = name_ip[0] + ': ' + name_ip[1]
            self.dropdown_menu.addItem(text)
        self.ip_addr = NAME_IP_LIST[0][1]

        self.server_running = True
        self.server_thread = threading.Thread(target=self.server)
        self.server_thread.start()

        font = QtGui.QFont()
        font.setPointSize(20)
        self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget)
        self.graphicsView.setGeometry(QtCore.QRect(10, 10, 800, 431))
        self.graphicsView.setObjectName("graphicsView")
        self.StandardButton = QtWidgets.QPushButton(self.centralwidget)
        self.StandardButton.setGeometry(QtCore.QRect(60, 470, 170, 60))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.StandardButton.sizePolicy().hasHeightForWidth())
        self.StandardButton.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setPointSize(20)
        self.StandardButton.setFont(font)
        self.StandardButton.setObjectName("StandardButton")
        self.AdvancedButton = QtWidgets.QPushButton(self.centralwidget)
        self.AdvancedButton.setGeometry(QtCore.QRect(570, 470, 170, 60))
        font = QtGui.QFont()
        font.setPointSize(20)
        self.AdvancedButton.setFont(font)
        self.AdvancedButton.setObjectName("AdvancedButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.LCD = QLCDNumber(self.centralwidget)
        self.LCD.setGeometry(QtCore.QRect(350, 480, 100, 40))
        self.LCD.display(0)
        self.LCD.setStyleSheet(
            'QLCDNumber {background-color: green; color: red;}')

        self.clockLCD = QLCDNumber(self.centralwidget)
        self.clockLCD.setGeometry(QtCore.QRect(350, 540, 100, 40))
        self.clockLCD.display('3:00')
        self.clockLCD.setStyleSheet(
            'QLCDNumber {background-color: yellow; color: red;}')

        self.scene = QGraphicsScene()
        self.graphicsView.setScene(self.scene)
        greenBrush = QBrush(Qt.green)  #2 single healthy
        yellowBrush = QBrush(Qt.yellow)  #1 single stressed
        whiteBrush = QBrush(Qt.white)  #0 empty
        blueBrush = QBrush(Qt.blue)  #3 double
        pinkBrush = QBrush(Qt.magenta)  #4 tiller
        self.blackPen = QPen(Qt.black)
        self.BrushList = [
            whiteBrush, yellowBrush, greenBrush, blueBrush, pinkBrush,
            QBrush(Qt.black)
        ]
        self.colorNames = [
            'Empty', 'Stressed', 'Healthy', 'Double', 'Tiller', 'Detection'
        ]

        self.level = 0  #standard
        self.newDetectionAvailable = False
        self.detectedFieldConfig = 5 * np.ones((4, 16), dtype=np.int8)
        self.fieldConfig = self.randFieldConfig()

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        self.AdvancedButton.clicked.connect(self.AdvBtnClickedSlot)
        self.StandardButton.clicked.connect(self.StdBtnClickedSlot)
        self.StdBtnClickedSlot()
        self.drawPlants()

        self.drawing_timer = QTimer()
        self.drawing_timer.setInterval(50)
        self.drawing_timer.timeout.connect(self.updateDetectionResult)
        self.drawing_timer.start()

        self.clock_seconds = 0
        self.timestamp = '0:00'
        self.clock_timer = QTimer()
        self.clock_timer.setInterval(1000)
        self.clock_timer.timeout.connect(self.updateClock)
        self.clock_timer.start()
        self.time_is_up = False
        app.aboutToQuit.connect(self.closeEvent)

    def updateClock(self):
        if self.clock_seconds >= 300:
            if self.clock_seconds % 2 == 0:
                self.clockLCD.setStyleSheet(
                    'QLCDNumber {background-color: yellow; color: red;}')
            else:
                self.clockLCD.setStyleSheet(
                    'QLCDNumber {background-color: white; color: red;}')
            self.clockLCD.display('5:00')
            self.time_is_up = True
        else:
            self.timestamp = str(self.clock_seconds // 60) + ':'
            sec = self.clock_seconds % 60
            self.timestamp += '0' + str(sec) if sec < 10 else str(sec)
            self.clockLCD.display(self.timestamp)
        self.clock_seconds += 1

    def updateDetectionResult(self):
        if self.newDetectionAvailable:
            self.drawPlants()
            self.newDetectionAvailable = False

    def closeEvent(self):
        self.server_running = False
        self.server_thread.join()

    def server(self):
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            s.bind(('', PORT))
            while self.server_running:
                try:
                    s.settimeout(1)
                    s.listen(1)
                    c, addr = s.accept()
                    if addr[0] != self.ip_addr:
                        c.close()
                        continue
                    with c:
                        while self.server_running:
                            try:
                                c.settimeout(5)
                                msg = c.recv(1024)
                                if len(msg) != 64:
                                    c.close()
                                    print('invalid msg')
                                    break
                                if not self.time_is_up:
                                    text = msg.decode('utf-8')
                                    self.detectedFieldConfig = np.reshape(
                                        np.array(list(text), dtype=np.int8),
                                        (4, 16))
                                    upper_limit = 3 if self.level == 0 else 5
                                    self.detectedFieldConfig[
                                        (self.detectedFieldConfig < 0) |
                                        (self.detectedFieldConfig >=
                                         upper_limit)] = 5
                                    self.newDetectionAvailable = True
                                    #f = open("log.txt", "a")
                                    #f.write(self.ip_addr+','+self.timestamp+','+msg)
                                    #f.close()
                            except socket.timeout:
                                print('client stopped sending updates')
                                c.close()
                                break
                            except socket.error as exc:
                                print(exc)
                                c.close()
                                break
                except socket.timeout:
                    pass
            s.close()

    def drawPlants(self):
        size = 20
        hor_space = 40
        ver_space = 100
        self.scene.clear()
        for y in range(4):
            for x in range(16):
                plant_type = self.fieldConfig.item((y, x))
                r = QtCore.QRectF(QtCore.QPointF(x * hor_space, y * ver_space),
                                  QtCore.QSizeF(size, size))
                self.scene.addRect(r, self.blackPen,
                                   self.BrushList[plant_type])
                detected_plant_type = self.detectedFieldConfig.item((y, x))
                self.scene.addEllipse(x * hor_space, y * ver_space + 30, size,
                                      size, self.blackPen,
                                      self.BrushList[detected_plant_type])

        # separation line
        self.scene.addLine(
            QtCore.QLineF(16.4 * hor_space, 0, 16.4 * hor_space, 350))
        # draw a legend
        for i in range(3 if self.level == 0 else 5):
            r = QtCore.QRectF(
                QtCore.QPointF(17 * hor_space, i * ver_space / 2),
                QtCore.QSizeF(size, size))
            self.scene.addRect(r, self.blackPen, self.BrushList[i])
            t = self.scene.addText(self.colorNames[i], QFont("Helvetica"))
            t.setPos(18 * hor_space, i * ver_space / 2)
        i = 3 if self.level == 0 else 5
        self.scene.addEllipse(17 * hor_space, i * ver_space / 2, size, size,
                              self.blackPen, self.BrushList[5])
        t = self.scene.addText(self.colorNames[5], QFont("Helvetica"))
        t.setPos(18 * hor_space, i * ver_space / 2)

        #calculate the score
        true_count_per_row = np.count_nonzero(
            np.logical_and(self.fieldConfig > 0, self.fieldConfig < 5),
            axis=1) + np.count_nonzero(self.fieldConfig == 3, axis=1)
        robot_count_per_row = np.count_nonzero(
            np.logical_and(self.detectedFieldConfig > 0,
                           self.detectedFieldConfig < 5),
            axis=1) + np.count_nonzero(self.detectedFieldConfig == 3, axis=1)
        # plant density score
        error_per_row = np.abs(true_count_per_row - robot_count_per_row)
        density_score = np.zeros(4, dtype=np.int32)
        density_score[error_per_row == 0] = 5
        density_score[error_per_row == 1] = 3
        density_score[error_per_row == 2] = 1
        correct_detections = self.fieldConfig[np.equal(
            self.fieldConfig, self.detectedFieldConfig)]
        points_for_empty_or_stress = 3 if self.level == 0 else 2
        detection_score = points_for_empty_or_stress * len(
            correct_detections[(correct_detections == 0) |
                               (correct_detections == 1)])

        if self.level == 1:
            detection_score += 4 * len(
                correct_detections[(correct_detections == 3) |
                                   (correct_detections == 4)])

        print(detection_score, density_score.sum())
        score = detection_score + density_score.sum()
        self.LCD.display(score)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(
            _translate("MainWindow", "2020 ASABE Robotics Competition"))
        self.StandardButton.setText(_translate("MainWindow", "Standard"))
        self.AdvancedButton.setText(_translate("MainWindow", "Advanced"))

    def initialize(self):
        self.fieldConfig = self.randFieldConfig()
        self.drawPlants()
        self.server_running = False
        self.server_thread.join()
        self.ip_addr = NAME_IP_LIST[self.dropdown_menu.currentIndex()][1]
        self.server_thread = threading.Thread(target=self.server)
        self.server_running = True
        self.server_thread.start()
        self.time_is_up = False
        self.clock_seconds = 0
        self.clockLCD.setStyleSheet(
            'QLCDNumber {background-color: yellow; color: red;}')

    def StdBtnClickedSlot(self):
        self.StandardButton.setStyleSheet("background-color: red")
        self.AdvancedButton.setStyleSheet("background-color: gray")
        self.level = 0
        self.initialize()

    def AdvBtnClickedSlot(self):
        self.AdvancedButton.setStyleSheet("background-color: red")
        self.StandardButton.setStyleSheet("background-color: gray")
        self.level = 1
        self.initialize()

    def randFieldConfig(self):
        #reset robot detection result
        self.detectedFieldConfig = 5 * np.ones((4, 16), dtype=np.int8)
        # standard
        # 0: empty, 12
        # 1: single stressed, 8
        # 2: single healthy, 44

        # advanced
        # 0: empty, 12
        # 1: single stressed, 8
        # 2: single healthuy, 36
        # 3: double, 4
        # 4: tiller, 4
        num_single_healthy_plants_per_row = 11 if self.level == 0 else 9
        single_healthy_block = 2 * np.ones(
            (4, num_single_healthy_plants_per_row), dtype=np.int8)
        num_abnormal_spots = 20 if self.level == 0 else 28
        abnormal_spots_array = np.zeros((1, num_abnormal_spots), dtype=np.int8)
        abnormal_spots_array[0, 12:20] = 1
        if self.level == 1:
            abnormal_spots_array[0, 20:24] = 3
            abnormal_spots_array[0, 24:28] = 4
        shuffle_by_row = np.vectorize(np.random.permutation,
                                      signature='(n)->(n)')
        abnormal_spots_array = shuffle_by_row(abnormal_spots_array)
        abnormal_block = np.reshape(abnormal_spots_array, (4, -1))
        fieldConfig = np.concatenate((single_healthy_block, abnormal_block),
                                     axis=1)
        fieldConfig = shuffle_by_row(fieldConfig)
        return fieldConfig
Ejemplo n.º 25
0
class MyWidget(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.btn_1.clicked.connect(self.one)
        self.btn_2.clicked.connect(self.two)
        self.btn_3.clicked.connect(self.three)
        self.btn_4.clicked.connect(self.four)
        self.btn_5.clicked.connect(self.five)
        self.btn_6.clicked.connect(self.six)
        self.btn_7.clicked.connect(self.seven)
        self.btn_8.clicked.connect(self.eight)
        self.btn_9.clicked.connect(self.nine)
        self.btn_0.clicked.connect(self.zero)
        self.btn_00.clicked.connect(self.zerozero)
        self.btn_floating.clicked.connect(self.floating)
        
        self.btn_m_plus.clicked.connect(self.m_plus)
        self.btn_m_minus.clicked.connect(self.m_minus)
        self.btn_mr.clicked.connect(self.mr)
        self.btn_mc.clicked.connect(self.mc)
        
        self.btn_sin.clicked.connect(self.sin)
        self.btn_cos.clicked.connect(self.cos)
        self.btn_tg.clicked.connect(self.tg)
        self.btn_ctg.clicked.connect(self.ctg)
        
        self.btn_plus.clicked.connect(self.plus)
        self.btn_minus.clicked.connect(self.minus)
        self.btn_ymn.clicked.connect(self.ymn)
        self.btn_step.clicked.connect(self.step)
        self.btn_delen.clicked.connect(self.delen)
        self.btn_pr.clicked.connect(self.pr)
        
        
        self.btn_delet.clicked.connect(self.delet)
        self.btn_ac.clicked.connect(self.ac)
        self.btn_result.clicked.connect(self.result)
        
        
    def one(self):
        global operator, operation
        if operation:
            operator.append('1')
            operation = False
        else:
            operator[-1] += '1'
        self.window.display(operator[-1])
        self.sprav.setText(''.join(operator))
    def two(self):
        global operator, operation
        if operation:
            operator.append('2')
            operation = False
        else:
            operator[-1] += '2'
        self.window.display(operator[-1])
        self.sprav.setText(''.join(operator))
    def three(self):
        global operator, operation
        if operation:
            operator.append('3')
            operation = False
        else:
            operator[-1] += '3'
        self.window.display(operator[-1])
        self.sprav.setText(''.join(operator))
    def four(self):
        global operator, operation
        if operation:
            operator.append('4')
            operation = False
        else:
            operator[-1] += '4'
        self.window.display(operator[-1])
        self.sprav.setText(''.join(operator))
    def five(self):
        global operator, operation
        if operation:
            operator.append('5')
            operation = False
        else:
            operator[-1] += '5'
        self.window.display(operator[-1])
        self.sprav.setText(''.join(operator))
    def six(self):
        global operator, operation
        if operation:
            operator.append('6')
            operation = False
        else:
            operator[-1] += '6'
        self.window.display(operator[-1])
        self.sprav.setText(''.join(operator))
    def seven(self):
        global operator, operation
        if operation:
            operator.append('7')
            operation = False
        else:
            operator[-1] += '7'
        self.window.display(operator[-1])
        self.sprav.setText(''.join(operator))
    def eight(self):
        global operator, operation
        if operation:
            operator.append('8')
            operation = False
        else:
            operator[-1] += '8'
        self.window.display(operator[-1])
        self.sprav.setText(''.join(operator))
    def nine(self):
        global operator, operation
        if operation:
            operator.append('9')
            operation = False
        else:
            operator[-1] += '9'
        self.window.display(operator[-1])
        self.sprav.setText(''.join(operator))
    def zero(self):
        global operator, operation
        if operation:
            operator.append('0')
            operation = False
        else:
            operator[-1] += '0'
        self.window.display(operator[-1])
        self.sprav.setText(''.join(operator))
    def zerozero(self):
        global operator, operation
        if operation:
            operator.append('00')
            operation = False
        else:
            operator[-1] += '00'
        self.window.display(operator[-1])
        self.sprav.setText(''.join(operator))
    def floating(self):
        global operator, operation
        if operation:
            operator.append('.')
            operation = False
        else:
            operator[-1] += '.'
        self.window.display(operator[-1])
        self.sprav.setText(''.join(operator))
    
    def m_plus(self):
        global memory, operator
        if operator[-1].isdigit():
            memory = float(memory) + float(operator[-1])
            self.m.setText("M+")
    def m_minus(self):
        global memory, operator
        if operator[-1].isdigit():
            memory = float(memory) - float(operator[-1])
            self.m.setText("M-")
    def mr(self):
        global operator, memory
        if memory != 0:
            operator.append('mr')
            self.window.display(memory)
            self.sprav.setText(''.join(operator))
    def mc(self):
        global memory
        memory = 0
        self.m.setText("")
        
    def sin(self):
        global operator, operation
        operation = True
        operator.append('sin')
        self.sprav.setText(''.join(operator))
    def cos(self):
        global operator, operation
        operation = True
        operator.append('cos')
        self.sprav.setText(''.join(operator))
    def tg(self):
        global operator, operation
        operation = True
        operator.append('tg')
        self.sprav.setText(''.join(operator))
    def ctg(self):
        global operator, operation
        operation = True
        operator.append('ctg')
        self.sprav.setText(''.join(operator))
        
    def plus(self):
        global operator, operation
        operation = True
        operator.append('+')
        self.sprav.setText(''.join(operator))
    def minus(self):
        global operator, operation
        operation = True
        operator.append('-')
        self.sprav.setText(''.join(operator))
    def ymn(self):
        global operator, operation
        operation = True
        operator.append('*')
        self.sprav.setText(''.join(operator))
    def step(self):
        global operator, operation
        operation = True
        operator.append('^')
        self.sprav.setText(''.join(operator))
    def delen(self):
        global operator, operation
        operation = True
        operator.append('/')
        self.sprav.setText(''.join(operator))
    def pr(self):
        global operator, operation
        operation = True
        operator.append('%')
        self.sprav.setText(''.join(operator))
            
    def delet(self):
        global operator, operation
        if len(operator) != 0:
            last = operator[-1]
            if last == 'sin' or last == 'cos' or last == 'tg' or last == 'ctg' or last == 'mr':
                del operator[-1]
            else:
                operator[-1] = operator[-1][:-1:]
            if operator[-1] == '':
                del operator[-1]
            if len(operator) != 0:
                self.window.display(operator[-1])
            else:
                operator = ['']
                self.window.display(0)
            self.sprav.setText(''.join(operator))
    def ac(self):
        global operator, operation, k
        k += 1
        if k == 7:
            self.resize(912, 689)
        operator = []
        operation = True
        self.window.display(0)
        self.sprav.setText(''.join(operator))
    
    def result(self):
        global operator, memory, operation
        try:
            while 'mr' in operator:
                index = operator.index('mr')
                operator[index] = memory
            while 'sin' in operator:
                index = operator.index('sin')
                rad = math.radians(float(operator[index + 1]))
                sin = math.sin(rad)
                del operator[index + 1]
                operator[index] = str(sin)
            while 'cos' in operator:
                index = operator.index('cos')
                rad = math.radians(float(operator[index + 1]))
                cos = math.cos(rad)
                del operator[index + 1]
                operator[index] = str(cos)
            while 'tg' in operator:
                index = operator.index('tg')
                rad = math.radians(float(operator[index + 1]))
                tg = math.tan(rad)
                del operator[index + 1]
                operator[index] = str(tg)
            while 'ctg' in operator:
                index = operator.index('ctg')
                rad = math.radians(float(operator[index + 1]))
                ctg = 1 / math.tan(rad)
                del operator[index + 1]
                operator[index] = str(ctg)
            while '^' in operator:
                index = operator.index('^')
                count = float(operator[index - 1]) ** float(operator[index + 1])
                del operator[index + 1]
                operator[index] = str(float(round(count, 15)))
                del operator[index - 1]
            while ('*' in operator) or ("/" in operator) or ("%" in operator):
                if '*' in operator:
                    index_1 = operator.index('*')
                else:
                    index_1 = 1000
                if '/' in operator:
                    index_2 = operator.index('/')
                else:
                    index_2 = 1000
                if '%' in operator:
                    index_3 = operator.index('%')
                else:
                    index_3 = 1000
                spisok = [index_1, index_2, index_3]
                if min(spisok) == index_2:
                    count = float(operator[index_2 - 1]) / float(operator[index_2 + 1])
                    del operator[index_2 + 1]
                    operator[index_2] = str(count)
                    del operator[index_2 - 1]
                elif min(spisok) == index_1:
                    count = float(operator[index_1 - 1]) * float(operator[index_1 + 1])
                    del operator[index_1 + 1]
                    operator[index_1] = str(float(round(count, 15)))
                    del operator[index_1 - 1]
                elif min(spisok) == index_3:
                    count = float(operator[index_3 - 1]) % float(operator[index_3 + 1])
                    del operator[index_3 + 1]
                    operator[index_3] = str(float(round(count, 15)))
                    del operator[index_3 - 1]
            while ('+' in operator) or ("-" in operator):
                if '+' in operator:
                    index_1 = operator.index('+')
                else:
                    index_1 = 1000
                if '-' in operator:
                    index_2 = operator.index('-')
                else:
                    index_2 = 1000
                if (index_1 > index_2) and (index_2 != -1):
                    count = float(operator[index_2 - 1]) - float(operator[index_2 + 1])
                    del operator[index_2 + 1]
                    operator[index_2] = str(count)
                    del operator[index_2 - 1]
                elif (index_1 < index_2) and (index_1 != -1):
                    count = float(operator[index_1 - 1]) + float(operator[index_1 + 1])
                    del operator[index_1 + 1]
                    operator[index_1] = str(count)
                    del operator[index_1 - 1]
            self.sprav.setText(''.join(operator))
            self.window.display(operator[0])
        except Exception:
            self.window.display('Error')
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        #MainWindow.resize(912, 689)
        MainWindow.resize(490, 440)
        font = QFont()
        font.setFamily("MS Gothic")
        MainWindow.setFont(font)
        MainWindow.setStyleSheet("background-color: rgb(0, 0, 0);")
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.window = QLCDNumber(self.centralwidget)
        self.window.setGeometry(QRect(10, 10, 461, 60))
        self.window.setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:2, fx:0.5, fy:0.5, stop:1 rgba(249, 187, 0, 255));")
        self.window.setDigitCount(20)
        self.window.setObjectName("window")
        self.btn_ac = QPushButton(self.centralwidget)
        self.btn_ac.setGeometry(QRect(410, 320, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(20)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_ac.setFont(font)
        self.btn_ac.setStyleSheet("font: 75 20pt \"Segoe Script\";color: rgb(255, 0, 0);\n"
"background-color: rgb(29, 29, 29);")
        self.btn_ac.setIconSize(QSize(16, 16))
        self.btn_ac.setObjectName("btn_ac")
        self.btn_mr = QPushButton(self.centralwidget)
        self.btn_mr.setGeometry(QRect(170, 80, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(15)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_mr.setFont(font)
        self.btn_mr.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(0, 239, 239);font: 75 15pt \"Segoe Script\";")
        self.btn_mr.setIconSize(QSize(16, 16))
        self.btn_mr.setObjectName("btn_mr")
        self.btn_mc = QPushButton(self.centralwidget)
        self.btn_mc.setGeometry(QRect(250, 80, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(15)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_mc.setFont(font)
        self.btn_mc.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(0, 239, 239);font: 75 15pt \"Segoe Script\";")
        self.btn_mc.setIconSize(QSize(16, 16))
        self.btn_mc.setObjectName("btn_mc")
        self.btn_m_plus = QPushButton(self.centralwidget)
        self.btn_m_plus.setEnabled(True)
        self.btn_m_plus.setGeometry(QRect(10, 80, 61, 50))
        self.btn_m_plus.setMaximumSize(QSize(61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(15)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_m_plus.setFont(font)
        self.btn_m_plus.setCursor(QCursor(Qt.ArrowCursor))
        self.btn_m_plus.setMouseTracking(True)
        self.btn_m_plus.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(0, 239, 239);font: 75 15pt \"Segoe Script\";")
        self.btn_m_plus.setIconSize(QSize(16, 16))
        self.btn_m_plus.setCheckable(False)
        self.btn_m_plus.setChecked(False)
        self.btn_m_plus.setObjectName("btn_m_plus")
        self.btn_m_minus = QPushButton(self.centralwidget)
        self.btn_m_minus.setGeometry(QRect(90, 80, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(15)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_m_minus.setFont(font)
        self.btn_m_minus.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(0, 239, 239);font: 75 15pt \"Segoe Script\";")
        self.btn_m_minus.setIconSize(QSize(16, 16))
        self.btn_m_minus.setObjectName("btn_m_minus")
        self.btn_cos = QPushButton(self.centralwidget)
        self.btn_cos.setGeometry(QRect(410, 80, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(20)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_cos.setFont(font)
        self.btn_cos.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(255, 169, 254);font: 75 20pt \"Segoe Script\";")
        self.btn_cos.setIconSize(QSize(16, 16))
        self.btn_cos.setObjectName("btn_cos")
        self.btn_sin = QPushButton(self.centralwidget)
        self.btn_sin.setGeometry(QRect(330, 80, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(20)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_sin.setFont(font)
        self.btn_sin.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(255, 169, 254);font: 75 20pt \"Segoe Script\";")
        self.btn_sin.setIconSize(QSize(16, 16))
        self.btn_sin.setObjectName("btn_sin")
        self.btn_tg = QPushButton(self.centralwidget)
        self.btn_tg.setGeometry(QRect(330, 140, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(20)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_tg.setFont(font)
        self.btn_tg.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(255, 169, 254);font: 75 20pt \"Segoe Script\";")
        self.btn_tg.setIconSize(QSize(16, 16))
        self.btn_tg.setObjectName("btn_tg")
        self.btn_minus = QPushButton(self.centralwidget)
        self.btn_minus.setGeometry(QRect(250, 200, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_minus.setFont(font)
        self.btn_minus.setStyleSheet("background-color: rgb(29, 29, 29);font: 75 30pt \"Segoe Script\";color: rgb(27, 147, 0);")
        self.btn_minus.setIconSize(QSize(16, 16))
        self.btn_minus.setObjectName("btn_minus")
        self.btn_plus = QPushButton(self.centralwidget)
        self.btn_plus.setGeometry(QRect(250, 140, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_plus.setFont(font)
        self.btn_plus.setStyleSheet("background-color: rgb(29, 29, 29);font: 75 30pt \"Segoe Script\";color: rgb(27, 147, 0);")
        self.btn_plus.setIconSize(QSize(16, 16))
        self.btn_plus.setObjectName("btn_plus")
        self.btn_ymn = QPushButton(self.centralwidget)
        self.btn_ymn.setGeometry(QRect(250, 260, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_ymn.setFont(font)
        self.btn_ymn.setStyleSheet("background-color: rgb(29, 29, 29);font: 75 30pt \"Segoe Script\";color: rgb(27, 147, 0);")
        self.btn_ymn.setIconSize(QSize(16, 16))
        self.btn_ymn.setObjectName("btn_ymn")
        self.btn_result = QPushButton(self.centralwidget)
        self.btn_result.setGeometry(QRect(330, 320, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(40)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_result.setFont(font)
        self.btn_result.setStyleSheet("background-color: rgb(29, 29, 29);font: 75 40pt \"Segoe Script\";color: rgb(255, 140, 0);")
        self.btn_result.setIconSize(QSize(16, 16))
        self.btn_result.setObjectName("btn_result")
        self.btn_step = QPushButton(self.centralwidget)
        self.btn_step.setGeometry(QRect(330, 200, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_step.setFont(font)
        self.btn_step.setStyleSheet("background-color: rgb(29, 29, 29);font: 75 30pt \"Segoe Script\";color: rgb(27, 147, 0);")
        self.btn_step.setIconSize(QSize(16, 16))
        self.btn_step.setObjectName("btn_step")
        self.btn_1 = QPushButton(self.centralwidget)
        self.btn_1.setGeometry(QRect(10, 140, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_1.setFont(font)
        self.btn_1.setMouseTracking(False)
        self.btn_1.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(0, 85, 255);font: 75 30pt \"Segoe Script\";")
        self.btn_1.setIconSize(QSize(16, 16))
        self.btn_1.setCheckable(False)
        self.btn_1.setChecked(False)
        self.btn_1.setObjectName("btn_1")
        self.btn_2 = QPushButton(self.centralwidget)
        self.btn_2.setGeometry(QRect(90, 140, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_2.setFont(font)
        self.btn_2.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(0, 85, 255);font: 75 30pt \"Segoe Script\";")
        self.btn_2.setIconSize(QSize(16, 16))
        self.btn_2.setObjectName("btn_2")
        self.btn_3 = QPushButton(self.centralwidget)
        self.btn_3.setGeometry(QRect(170, 140, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_3.setFont(font)
        self.btn_3.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(0, 85, 255);font: 75 30pt \"Segoe Script\";")
        self.btn_3.setIconSize(QSize(16, 16))
        self.btn_3.setObjectName("btn_3")
        self.btn_4 = QPushButton(self.centralwidget)
        self.btn_4.setGeometry(QRect(10, 200, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_4.setFont(font)
        self.btn_4.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(0, 85, 255);font: 75 30pt \"Segoe Script\";")
        self.btn_4.setIconSize(QSize(16, 16))
        self.btn_4.setObjectName("btn_4")
        self.btn_5 = QPushButton(self.centralwidget)
        self.btn_5.setGeometry(QRect(90, 200, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_5.setFont(font)
        self.btn_5.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(0, 85, 255);font: 75 30pt \"Segoe Script\";")
        self.btn_5.setIconSize(QSize(16, 16))
        self.btn_5.setObjectName("btn_5")
        self.btn_6 = QPushButton(self.centralwidget)
        self.btn_6.setGeometry(QRect(170, 200, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_6.setFont(font)
        self.btn_6.setStyleSheet("background-color: rgb(29, 29, 29);font: 75 30pt \"Segoe Script\";color: rgb(0, 85, 255);")
        self.btn_6.setIconSize(QSize(16, 16))
        self.btn_6.setObjectName("btn_6")
        self.btn_7 = QPushButton(self.centralwidget)
        self.btn_7.setGeometry(QRect(10, 260, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_7.setFont(font)
        self.btn_7.setStyleSheet("background-color: rgb(29, 29, 29);font: 75 30pt \"Segoe Script\";color: rgb(0, 85, 255);")
        self.btn_7.setIconSize(QSize(16, 16))
        self.btn_7.setObjectName("btn_7")
        self.btn_8 = QPushButton(self.centralwidget)
        self.btn_8.setGeometry(QRect(90, 260, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_8.setFont(font)
        self.btn_8.setStyleSheet("background-color: rgb(29, 29, 29);font: 75 30pt \"Segoe Script\";color: rgb(0, 85, 255);")
        self.btn_8.setIconSize(QSize(16, 16))
        self.btn_8.setObjectName("btn_8")
        self.btn_9 = QPushButton(self.centralwidget)
        self.btn_9.setGeometry(QRect(170, 260, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_9.setFont(font)
        self.btn_9.setStyleSheet("background-color: rgb(29, 29, 29);font: 75 30pt \"Segoe Script\";color: rgb(0, 85, 255);")
        self.btn_9.setIconSize(QSize(16, 16))
        self.btn_9.setObjectName("btn_9")
        self.btn_0 = QPushButton(self.centralwidget)
        self.btn_0.setGeometry(QRect(10, 320, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_0.setFont(font)
        self.btn_0.setStyleSheet("background-color: rgb(29, 29, 29);font: 75 30pt \"Segoe Script\";color: rgb(0, 85, 255);")
        self.btn_0.setIconSize(QSize(16, 16))
        self.btn_0.setObjectName("btn_0")
        self.btn_ctg = QPushButton(self.centralwidget)
        self.btn_ctg.setGeometry(QRect(410, 140, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(20)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_ctg.setFont(font)
        self.btn_ctg.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(255, 169, 254);font: 75 20pt \"Segoe Script\";")
        self.btn_ctg.setIconSize(QSize(16, 16))
        self.btn_ctg.setObjectName("btn_ctg")
        self.btn_delen = QPushButton(self.centralwidget)
        self.btn_delen.setGeometry(QRect(330, 260, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_delen.setFont(font)
        self.btn_delen.setStyleSheet("background-color: rgb(29, 29, 29);font: 75 30pt \"Segoe Script\";color: rgb(27, 147, 0);")
        self.btn_delen.setIconSize(QSize(16, 16))
        self.btn_delen.setObjectName("btn_delen")
        self.Sprav = QLabel(self.centralwidget)
        self.Sprav.setGeometry(QRect(500, 10, 401, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(20)
        self.Sprav.setFont(font)
        self.Sprav.setStyleSheet("color: rgb(255, 255, 255);\n"
"color: rgb(255, 255, 0);")
        self.Sprav.setObjectName("Sprav")
        self.Text_sprav = QTextBrowser(self.centralwidget)
        self.Text_sprav.setGeometry(QRect(490, 69, 411, 351))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(12)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.Text_sprav.setFont(font)
        self.Text_sprav.setStyleSheet("color: rgb(255, 255, 0);\n"
"font: 12pt \"Segoe Script\";")
        self.Text_sprav.setObjectName("Text_sprav")
        self.textEdit = QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QRect(10, 480, 391, 160))
        font = QFont()
        font.setPointSize(14)
        self.textEdit.setFont(font)
        self.textEdit.setStyleSheet("color: rgb(255, 170, 0);")
        self.textEdit.setObjectName("textEdit")
        self.Sprav_2 = QLabel(self.centralwidget)
        self.Sprav_2.setGeometry(QRect(10, 430, 391, 41))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(20)
        self.Sprav_2.setFont(font)
        self.Sprav_2.setStyleSheet("color: rgb(255, 255, 255);\n"
"color: rgb(255, 255, 0);")
        self.Sprav_2.setObjectName("Sprav_2")
        self.Text_sprav_2 = QTextBrowser(self.centralwidget)
        self.Text_sprav_2.setGeometry(QRect(410, 480, 491, 161))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(12)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.Text_sprav_2.setFont(font)
        self.Text_sprav_2.setStyleSheet("color: rgb(255, 255, 0);\n"
"font: 12pt \"Segoe Script\";")
        self.Text_sprav_2.setObjectName("Text_sprav_2")
        self.m = QLabel(self.centralwidget)
        self.m.setGeometry(QRect(13, 13, 20, 10))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(9)
        self.m.setFont(font)
        self.m.setStyleSheet("background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:2, fx:0.5, fy:0.5, stop:1 rgba(249, 187, 0, 255));")
        self.m.setText("")
        self.m.setObjectName("m")
        self.btn_floating = QPushButton(self.centralwidget)
        self.btn_floating.setGeometry(QRect(250, 320, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(40)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_floating.setFont(font)
        self.btn_floating.setStyleSheet("background-color: rgb(29, 29, 29);font: 75 40pt \"Segoe Script\";\n"
"color: rgb(20, 24, 255);")
        self.btn_floating.setIconSize(QSize(16, 16))
        self.btn_floating.setObjectName("btn_floating")
        self.btn_00 = QPushButton(self.centralwidget)
        self.btn_00.setGeometry(QRect(90, 320, 141, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_00.setFont(font)
        self.btn_00.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(0, 85, 255);font: 75 30pt \"Segoe Script\";")
        self.btn_00.setIconSize(QSize(16, 16))
        self.btn_00.setObjectName("btn_00")
        self.btn_delet = QPushButton(self.centralwidget)
        self.btn_delet.setGeometry(QRect(410, 260, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(20)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_delet.setFont(font)
        self.btn_delet.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(255, 0, 0);font: 75 20pt \"Segoe Script\";")
        self.btn_delet.setIconSize(QSize(16, 16))
        self.btn_delet.setObjectName("btn_delet")
        self.btn_pr = QPushButton(self.centralwidget)
        self.btn_pr.setGeometry(QRect(410, 200, 61, 50))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(30)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(9)
        self.btn_pr.setFont(font)
        self.btn_pr.setStyleSheet("background-color: rgb(29, 29, 29);color: rgb(27, 147, 0);font: 75 30pt \"Segoe Script\";")
        self.btn_pr.setIconSize(QSize(16, 16))
        self.btn_pr.setObjectName("btn_pr")
        self.sprav = QLabel(self.centralwidget)
        self.sprav.setGeometry(QRect(40, 380, 441, 41))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(15)
        self.sprav.setFont(font)
        self.sprav.setStyleSheet("color: rgb(255, 255, 255);")
        self.sprav.setText("")
        self.sprav.setObjectName("sprav")
        self.Sprav_4 = QLabel(self.centralwidget)
        self.Sprav_4.setGeometry(QRect(410, 430, 491, 41))
        font = QFont()
        font.setFamily("Segoe Script")
        font.setPointSize(20)
        self.Sprav_4.setFont(font)
        self.Sprav_4.setStyleSheet("color: rgb(255, 255, 255);\n"
"color: rgb(255, 255, 0);")
        self.Sprav_4.setObjectName("Sprav_4")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setGeometry(QRect(0, 0, 912, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.btn_ac.setText(_translate("MainWindow", "AC"))
        self.btn_mr.setText(_translate("MainWindow", "MR"))
        self.btn_mc.setText(_translate("MainWindow", "MC"))
        self.btn_m_plus.setText(_translate("MainWindow", "M+"))
        self.btn_m_minus.setText(_translate("MainWindow", "M-"))
        self.btn_cos.setText(_translate("MainWindow", "cos"))
        self.btn_sin.setText(_translate("MainWindow", "sin"))
        self.btn_tg.setText(_translate("MainWindow", "tg"))
        self.btn_minus.setText(_translate("MainWindow", "-"))
        self.btn_plus.setText(_translate("MainWindow", "+"))
        self.btn_ymn.setText(_translate("MainWindow", "x"))
        self.btn_result.setText(_translate("MainWindow", "="))
        self.btn_step.setText(_translate("MainWindow", "^"))
        self.btn_1.setText(_translate("MainWindow", "1"))
        self.btn_2.setText(_translate("MainWindow", "2"))
        self.btn_3.setText(_translate("MainWindow", "3"))
        self.btn_4.setText(_translate("MainWindow", "4"))
        self.btn_5.setText(_translate("MainWindow", "5"))
        self.btn_6.setText(_translate("MainWindow", "6"))
        self.btn_7.setText(_translate("MainWindow", "7"))
        self.btn_8.setText(_translate("MainWindow", "8"))
        self.btn_9.setText(_translate("MainWindow", "9"))
        self.btn_0.setText(_translate("MainWindow", "0"))
        self.btn_ctg.setText(_translate("MainWindow", "ctg"))
        self.btn_delen.setText(_translate("MainWindow", "/"))
        self.Sprav.setText(_translate("MainWindow", "         Справочник"))
        self.Text_sprav.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'Segoe Script\'; font-size:12pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:36px; margin-right:36px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Lato-Regular,Arial,sans-serif\'; color:#0febff;\">[M+] – прибавление числа в память</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:36px; margin-right:36px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Lato-Regular,Arial,sans-serif\'; color:#0febff;\">[M-] – вычитание числа из памяти</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:36px; margin-right:36px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Lato-Regular,Arial,sans-serif\'; color:#0febff;\">[^] – возведение в выбранную степень</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:36px; margin-right:36px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Lato-Regular,Arial,sans-serif\'; color:#0febff;\">[+][-][x][</span><span style=\" font-family:\'Symbol\'; color:#0febff;\">¸</span><span style=\" font-family:\'Lato-Regular,Arial,sans-serif\'; color:#0febff;\">] – арифметические операции</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:36px; margin-right:36px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Lato-Regular,Arial,sans-serif\'; color:#0febff;\">[MR] – вывести содержимое памяти на дисплей</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:36px; margin-right:36px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Lato-Regular,Arial,sans-serif\'; color:#0febff;\">[MC] – очистить содержимое памяти</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:36px; margin-right:36px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Lato-Regular,Arial,sans-serif\'; color:#0febff;\">[AC] – общий сброс</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:36px; margin-right:36px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'Lato-Regular,Arial,sans-serif\'; color:#0febff;\">[sin][cos][tg][ctg] – формулы произведения тригонометрических функций, при работе с этими функциями сначала записывается sin, cos, tg, ctg потом число(Например sin 45)</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:36px; margin-right:36px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'MS Shell Dlg 2\'; color:#0febff;\">[Del]</span><span style=\" font-family:\'Lato-Regular,Arial,sans-serif\'; color:#0febff;\"> – удаляет последнюю введенную цифру или знак действия</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:36px; margin-right:36px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'MS Shell Dlg 2\'; color:#0febff;\">[%]</span><span style=\" font-family:\'Lato-Regular,Arial,sans-serif\'; color:#0febff;\"> – вычисляет остаток от деления</span><span style=\" font-family:\'MS Shell Dlg 2\'; font-size:8pt; color:#0febff;\"><br /></span><span style=\" font-family:\'MS Shell Dlg 2\'; color:#0febff;\">[.]</span><span style=\" font-family:\'Lato-Regular,Arial,sans-serif\'; color:#0febff;\"> – используется для записи дробной части</span></p></body></html>"))
        self.Sprav_2.setText(_translate("MainWindow", "        Для заметок"))
        self.Text_sprav_2.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'Segoe Script\'; font-size:12pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'MS Shell Dlg 2\'; font-size:10pt; color:#00ff7f;\">    </span><span style=\" font-family:\'MS Shell Dlg 2\'; font-size:10pt; color:#11ff00;\">  - Если указанный порядок действий невозможно вычислить</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'MS Shell Dlg 2\'; font-size:10pt; color:#11ff00;\">      - Если мы накасячили</span></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'MS Shell Dlg 2\'; font-size:10pt; color:#11ff00;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'MS Shell Dlg 2\'; font-size:10pt; color:#11ff00;\"><br /></p>\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'MS Shell Dlg 2\'; font-size:10pt; color:#11ff00;\"><br /></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'MS Shell Dlg 2\'; font-size:10pt; color:#11ff00;\">                   По всем вопросам обращайтесь  https://vk.com/vasily.shishkin</span></p>\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'MS Shell Dlg 2\'; font-size:10pt; color:#11ff00;\">                                                                    https://vk.com/andrey.krivosheev</span></p></body></html>"))
        self.btn_floating.setText(_translate("MainWindow", "."))
        self.btn_00.setText(_translate("MainWindow", "00"))
        self.btn_delet.setText(_translate("MainWindow", "Del"))
        self.btn_pr.setText(_translate("MainWindow", "%"))
        self.Sprav_4.setText(_translate("MainWindow", "  Почему появляется ошибка?"))       
Ejemplo n.º 26
0
class ControlWindow(QWidget):

    #Initialize the class (actually creating a initUI method and calling that, or just put all that code in here)
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        #Primary screen - Control Window Screen (laptop) - Screen0 will always be primary screen (only screen on RPi)
        self.sizeScreen0 = QDesktopWidget().screenGeometry(
            0)  #use this function to get the screen geometry
        print('  Screen 0 size : ' + str(self.sizeScreen0.height()) + 'x' +
              str(self.sizeScreen0.width()))
        #Print out the screen size for debugging issues, will display in terminal

        self.setGeometry(
            0, 0, self.sizeScreen0.width(),
            self.sizeScreen0.height())  #set window screen dimensions
        self.setWindowTitle(
            'Control Panel')  #name window screen (displayed at top of window)

        #Create a button - same format for any button you want to make
        self.Zero_button = QPushButton(
            self)  #declare the button instance from the QPushbutton class
        # set the button position and size .setgeometry(Qrect(X position, Y position, button width, button height)) position is from upper left of button
        # The button position and dimensions are relative to the screen size. You can type in absolute numbers instead if you want and are sure of screensize
        self.Zero_button.setGeometry(
            QRect(self.sizeScreen0.width() * 0.015,
                  self.sizeScreen0.height() * 0.02,
                  self.sizeScreen0.width() * 0.165,
                  self.sizeScreen0.height() * 0.12))
        self.Zero_button.setObjectName("Zero_button")  #name the button
        self.Zero_button.setStyleSheet(
            "font: bold 14px; background-color: rgb(5,176,36);")

        self.Weight_button = QPushButton(self)
        self.Weight_button.setGeometry(
            QRect(self.sizeScreen0.width() * 0.2,
                  self.sizeScreen0.height() * 0.02,
                  self.sizeScreen0.width() * 0.165,
                  self.sizeScreen0.height() * 0.12))
        self.Weight_button.setObjectName("Weight_button")
        self.Weight_button.setStyleSheet(
            "font: bold 14px; background-color: rgb(5,176,36);")

        self.Estop_button = QPushButton(self)
        self.Estop_button.setGeometry(
            QRect(self.sizeScreen0.width() * 0.74,
                  self.sizeScreen0.height() * 0.02,
                  self.sizeScreen0.width() * 0.2,
                  self.sizeScreen0.height() * 0.12))
        self.Estop_button.setObjectName("Estop_button")
        self.Estop_button.setStyleSheet(
            "font: bold 14px; background-color: red;")

        #Create another button (same process as before)
        self.Close_button = QPushButton(self)
        self.Close_button.setGeometry(
            QRect(self.sizeScreen0.width() * 0.95,
                  self.sizeScreen0.height() * 0.01,
                  self.sizeScreen0.width() * 0.04,
                  self.sizeScreen0.height() * 0.06))
        self.Close_button.setObjectName("X_button")
        self.Close_button.setStyleSheet(
            "font: bold 18px; background-color: rgb(5,176,36);")

        self.Top_label = QLabel(self)
        self.Top_label.setGeometry(
            QRect(self.sizeScreen0.width() * 0.1,
                  self.sizeScreen0.height() * 0.125,
                  self.sizeScreen0.width() * 0.3,
                  self.sizeScreen0.height() * 0.3))
        self.Top_label.setStyleSheet("font: bold 20px;")

        self.Middle_label = QLabel(self)
        self.Middle_label.setGeometry(
            QRect(self.sizeScreen0.width() * 0.1,
                  self.sizeScreen0.height() * 0.325,
                  self.sizeScreen0.width() * 0.3,
                  self.sizeScreen0.height() * 0.3))
        self.Middle_label.setStyleSheet("font: bold 20px;")

        self.Bottom_label = QLabel(self)
        self.Bottom_label.setGeometry(
            QRect(self.sizeScreen0.width() * 0.1,
                  self.sizeScreen0.height() * 0.525,
                  self.sizeScreen0.width() * 0.3,
                  self.sizeScreen0.height() * 0.3))
        self.Bottom_label.setStyleSheet("font: bold 20px;")

        self.Progress_label = QLabel(self)
        self.Progress_label.setGeometry(
            QRect(self.sizeScreen0.width() * 0.1,
                  self.sizeScreen0.height() * 0.65,
                  self.sizeScreen0.width() * 0.3,
                  self.sizeScreen0.height() * 0.3))
        self.Progress_label.setStyleSheet("font: bold 15px;")

        self.Weight_label = QLabel(self)
        self.Weight_label.setGeometry(
            QRect(self.sizeScreen0.width() * 0.355,
                  self.sizeScreen0.height() * 0.05,
                  self.sizeScreen0.width() * 0.3,
                  self.sizeScreen0.height() * 0.3))
        self.Weight_label.setStyleSheet("font: bold 15px;")

        self.Moisture_label = QLabel(self)
        self.Moisture_label.setGeometry(
            QRect(self.sizeScreen0.width() * 0.6125,
                  self.sizeScreen0.height() * 0.125,
                  self.sizeScreen0.width() * 0.2,
                  self.sizeScreen0.height() * 0.15))
        self.Moisture_label.setStyleSheet("font: bold 15px;")

        self.TopTemp_label = QLabel(self)
        self.TopTemp_label.setGeometry(
            QRect(self.sizeScreen0.width() * 0.4,
                  self.sizeScreen0.height() * 0.03,
                  self.sizeScreen0.width() * 0.22,
                  self.sizeScreen0.height() * 0.05))
        self.TopTemp_label.setStyleSheet("font: bold 15px;")

        self.BottomTemp_label = QLabel(self)
        self.BottomTemp_label.setGeometry(
            QRect(self.sizeScreen0.width() * 0.4,
                  self.sizeScreen0.height() * 0.105,
                  self.sizeScreen0.width() * 0.22,
                  self.sizeScreen0.height() * 0.05))
        self.BottomTemp_label.setStyleSheet("font: bold 15px;")

        #Create an LCD display widget to show numbers
        self.LCDdisplay = QLCDNumber(
            self)  #Create the instance from the QLCDNumber class
        #Set the position and dimensions just like was done for the buttons
        self.LCDdisplay.setGeometry(
            QRect(self.sizeScreen0.width() * 0.935,
                  self.sizeScreen0.height() * 0.8,
                  self.sizeScreen0.width() * 0.05,
                  self.sizeScreen0.height() * 0.1))
        self.LCDdisplay.setObjectName("Counter")  #Name it
        self.LCDdisplay.setStyleSheet("background-color:white;")

        self.TopTempdisplay = QLCDNumber(self)
        self.TopTempdisplay.setGeometry(
            QRect(self.sizeScreen0.width() * 0.62,
                  self.sizeScreen0.height() * 0.025,
                  self.sizeScreen0.width() * 0.1,
                  self.sizeScreen0.height() * 0.06))
        self.TopTempdisplay.setObjectName("Top Temperature")
        self.TopTempdisplay.setStyleSheet("background-color:white;")

        self.BottomTempdisplay = QLCDNumber(self)
        self.BottomTempdisplay.setGeometry(
            QRect(self.sizeScreen0.width() * 0.62,
                  self.sizeScreen0.height() * 0.1,
                  self.sizeScreen0.width() * 0.1,
                  self.sizeScreen0.height() * 0.06))
        self.BottomTempdisplay.setObjectName("Bottom Temperature")
        self.BottomTempdisplay.setStyleSheet("background-color:white;")

        self.TopWeightdisplay = QLCDNumber(self)
        self.TopWeightdisplay.setGeometry(
            QRect(self.sizeScreen0.width() * 0.3,
                  self.sizeScreen0.height() * 0.22,
                  self.sizeScreen0.width() * 0.2,
                  self.sizeScreen0.height() * 0.12))
        self.TopWeightdisplay.setObjectName("Top Weight")
        self.TopWeightdisplay.setStyleSheet("background-color:white;")

        self.TopMoisturedisplay = QLCDNumber(self)
        self.TopMoisturedisplay.setGeometry(
            QRect(self.sizeScreen0.width() * 0.6,
                  self.sizeScreen0.height() * 0.22,
                  self.sizeScreen0.width() * 0.2,
                  self.sizeScreen0.height() * 0.12))
        self.TopMoisturedisplay.setObjectName("Top Moisture")
        self.TopMoisturedisplay.setStyleSheet("background-color:white;")

        self.MiddleWeightdisplay = QLCDNumber(self)
        self.MiddleWeightdisplay.setGeometry(
            QRect(self.sizeScreen0.width() * 0.3,
                  self.sizeScreen0.height() * 0.42,
                  self.sizeScreen0.width() * 0.2,
                  self.sizeScreen0.height() * 0.12))
        self.MiddleWeightdisplay.setObjectName("Middle Weight")
        self.MiddleWeightdisplay.setStyleSheet("background-color:white;")

        self.MiddleMoisturedisplay = QLCDNumber(self)
        self.MiddleMoisturedisplay.setGeometry(
            QRect(self.sizeScreen0.width() * 0.6,
                  self.sizeScreen0.height() * 0.42,
                  self.sizeScreen0.width() * 0.2,
                  self.sizeScreen0.height() * 0.12))
        self.MiddleMoisturedisplay.setObjectName("Middle Moisture")
        self.MiddleMoisturedisplay.setStyleSheet("background-color:white;")

        self.BottomWeightdisplay = QLCDNumber(self)
        self.BottomWeightdisplay.setGeometry(
            QRect(self.sizeScreen0.width() * 0.3,
                  self.sizeScreen0.height() * 0.62,
                  self.sizeScreen0.width() * 0.2,
                  self.sizeScreen0.height() * 0.12))
        self.BottomWeightdisplay.setObjectName("Bottom Weight")
        self.BottomWeightdisplay.setStyleSheet("background-color:white;")

        self.BottomMoisturedisplay = QLCDNumber(self)
        self.BottomMoisturedisplay.setGeometry(
            QRect(self.sizeScreen0.width() * 0.6,
                  self.sizeScreen0.height() * 0.62,
                  self.sizeScreen0.width() * 0.2,
                  self.sizeScreen0.height() * 0.12))
        self.BottomMoisturedisplay.setObjectName("Bottom Moisture")
        self.BottomMoisturedisplay.setStyleSheet("background-color:white;")

        self.Progress_bar = QProgressBar(self)
        self.Progress_bar.setGeometry(
            QRect(self.sizeScreen0.width() * 0.1,
                  self.sizeScreen0.height() * 0.83,
                  self.sizeScreen0.width() * 0.7,
                  self.sizeScreen0.height() * 0.04))
        self.Progress_bar.setRange(0, 100)
        #loop = 60
        #self.Progress_bar.setValue(loop)
        self.Progress_bar.setStyleSheet(
            "font: bold 15px; text-align: center; border: 1px solid grey;")

        #Not exactly sure what this does, but it is needed to put a name label on the buttons
        _translate = QCoreApplication.translate

        #Name the Close Button label
        self.Close_button.setText(_translate("ControlWindow", "X"))
        #Name the calibrate button label
        self.Zero_button.setText(_translate("ControlWindow",
                                            "Zero All Scales"))

        self.Weight_button.setText(
            _translate("ControlWindow", "Set Initial Weights"))

        self.Estop_button.setText(
            _translate("ControlWindow", "Emergency Shutoff"))

        self.Top_label.setText(_translate("ControlWindow", "Top Shelf:"))

        self.Middle_label.setText(_translate("ControlWindow", "Middle Shelf:"))

        self.Bottom_label.setText(_translate("ControlWindow", "Bottom Shelf:"))

        self.Progress_label.setText(
            _translate("ControlWindow", "Drying Progress:"))

        self.Weight_label.setText(_translate("ControlWindow", "Weight (lbs):"))

        self.Moisture_label.setText(
            _translate("ControlWindow", "Moisture Percent (%):"))

        self.TopTemp_label.setText(
            _translate("ControlWindow", "Top Temperature (F):"))

        self.BottomTemp_label.setText(
            _translate("ControlWindow", "Bottom Temperature (F):"))

        #This sets the Close button's action when you click on it, in this case it will run the method "CloseUp" which is below
        self.Close_button.clicked.connect(self.CloseUp)

        #Show the screen, not sure it is really needed though
        self.show

    #Like before, not exactly sure what it is doing, but needed to create and show the button naming labels
    def retranslateUi(self, TestDisplay):
        _translate = QCoreApplication.translate
        TestDisplay.setWindowTitle(_translate("MainGroWin", "MainWindow"))
        self.Disconnect_button.setText(_translate("MainGroWin", "Disconnect"))

    #The function that will close the window and program when you click on the "Close" button
    def CloseUp(
        self
    ):  #create method inside the ControlWindow Class (belongs to the ControlWindow class)
        # print('Closed')  #Used for debugging in terminal
        # Maximize the window, you can use the windowstate function to minimize, maximize and manipulate the window
        self.setWindowState(Qt.WindowMaximized)
        # Close up the window and shut it down
        self.close()

    #Function to update the LED value inside the counting display
    def updateLED(self, LEDnum):
        #update the LED value
        self.LEDvalue = LEDnum  #rename the variable for clarity
        self.LCDdisplay.display(
            self.LEDvalue
        )  #use the display method of the LCDdisplay inhereited class to update the LED

    def updateProgressBar(self, ProgressNum):
        self.ProgressValue = ProgressNum
        self.Progress_bar.setValue(self.ProgressValue)

    def updateTopTemp(self, TopTemp):
        self.TopTempValue = TopTemp
        self.TopTempdisplay.display(self.TopTempValue)
Ejemplo n.º 27
0
class MainWindow(QWidget):

    def __init__(self):
        super().__init__()
        self.init_ui()
        self.assign_actions()
        self.fill_ui()
        self.PbPresetSave.setDisabled(True)
        self.show()
        self.timeloop()

    def init_ui(self):
        """Initialize user interface"""
        app.setStyle(QStyleFactory.create('Fusion'))  # "Windows", "WindowsXP", "Fusion"
        self.setWindowTitle('MidiFoot')
        self.setWindowIcon(QIcon('web.png'))
        self.setFixedSize(361, 372)

        # groupbox 'Preset'
        self.groupBox1 = QGroupBox(self)
        self.groupBox1.setGeometry(QRect(10, -8, 221, 89))

        self.CbPreset = QComboBox(self.groupBox1)
        self.CbPreset.setGeometry(QRect(10, 28, 201, 22))

        self.PbPresetSave = QPushButton(self.groupBox1)
        self.PbPresetSave.setGeometry(QRect(80, 58, 61, 23))
        self.PbPresetSave.setText('save')

        self.PbPresetNew = QPushButton(self.groupBox1)
        self.PbPresetNew.setGeometry(QRect(10, 58, 61, 23))
        self.PbPresetNew.setText('new')

        self.PbPresetDel = QPushButton(self.groupBox1)
        self.PbPresetDel.setGeometry(QRect(150, 58, 61, 23))
        self.PbPresetDel.setText('delete')

        # groupbox 'Options'
        self.groupBox2 = QGroupBox(self)
        self.groupBox2.setGeometry(QRect(10, 72, 341, 109))

        self.CbGamepad = QComboBox(self.groupBox2)
        self.CbGamepad.setGeometry(QRect(10, 28, 151, 22))

        self.label1 = QLabel(self.groupBox2)
        self.label1.setGeometry(QRect(10, 58, 61, 16))
        self.label1.setText('Gamepad in')

        self.CbMidiOut = QComboBox(self.groupBox2)
        self.CbMidiOut.setGeometry(QRect(180, 28, 151, 22))

        self.label2 = QLabel(self.groupBox2)
        self.label2.setGeometry(QRect(290, 58, 47, 13))
        self.label2.setText('MIDI out')

        self.label3 = QLabel(self.groupBox2)
        self.label3.setGeometry(QRect(10, 78, 81, 16))
        self.label3.setText('Refresh rate, ms')

        self.HsRefreshRate = QSlider(self.groupBox2)
        self.HsRefreshRate.setGeometry(QRect(100, 78, 181, 22))
        self.HsRefreshRate.setOrientation(Qt.Horizontal)
        self.HsRefreshRate.setMinimum(0)
        self.HsRefreshRate.setMaximum(1000)

        self.LnRefreshRate = QLCDNumber(self.groupBox2)
        self.LnRefreshRate.setGeometry(QRect(290, 78, 41, 21))

        # key_list table
        self.CvKeyList = QTableWidget(self)
        self.CvKeyList.setGeometry(QRect(10, 190, 341, 141))
        self.CvKeyList.setColumnCount(6)
        self.CvKeyList.verticalHeader().setVisible(False)
        self.CvKeyList.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.CvKeyList.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.CvKeyList.horizontalHeader().setDefaultAlignment(Qt.AlignLeft)
        self.CvKeyList.horizontalHeader().setAutoFillBackground(True)
        self.CvKeyList.setAlternatingRowColors(True)
        self.CvKeyList.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.CvKeyList.setEditTriggers(QAbstractItemView.NoEditTriggers)

        self.PbKeyNew = QPushButton(self)
        self.PbKeyNew.setGeometry(QRect(10, 340, 61, 23))
        self.PbKeyNew.setText('new')

        self.PbKeyDel = QPushButton(self)
        self.PbKeyDel.setGeometry(QRect(80, 340, 61, 23))
        self.PbKeyDel.setText('delete')

        self.LeActionMonitor = QLineEdit(self)
        self.LeActionMonitor.setGeometry(QRect(240, 10, 111, 71))
        self.LeActionMonitor.setReadOnly(True)
        self.LeActionMonitor.setFocusPolicy(Qt.NoFocus)

        self.LbLogo = QLabel(self)
        self.LbLogo.setPixmap(QPixmap('LXWlogo.png'))
        self.LbLogo.move(225, 335)

    def assign_actions(self):
        # exit program event
        quit = QAction("Quit", self)
        quit.triggered.connect(self.closeEvent)

        self.CbMidiOut.currentIndexChanged[int].connect(self.mididev_change)
        self.CbGamepad.currentIndexChanged[int].connect(self.gamepad_change)
        self.CbPreset.currentIndexChanged[int].connect(self.preset_change)
        self.HsRefreshRate.valueChanged[int].connect(self.refresh_rate_change)
        self.PbPresetSave.clicked.connect(self.save_preset)
        self.CvKeyList.itemChanged.connect(self.changes_saved)
        self.CvKeyList.doubleClicked.connect(self.input_button_form)
        self.PbKeyNew.clicked.connect(self.input_button_form)

    def input_button_form(self):
        """Show form for input new button parameters and return values

        """
        input_window = NewControlWindow(self)
        input_window.show()

    def fill_ui(self):
        global INI_NAME, CONFIG, GAMEPAD_DEV_LIST, MIDI_DEV_LIST, REFRESH_RATE

        self.gamepad_load()
        for element in GAMEPAD_DEV_LIST:  # fill combobox CbGamepad
            self.CbGamepad.addItem(element[1])

        self.mididev_load()
        for element in MIDI_DEV_LIST:  # fill combobox CbMidiOut
            self.CbMidiOut.addItem(element[1])

        self.ini_get_config(INI_NAME)
        for section in CONFIG.sections():  # fill combobox CbPreset
            self.CbPreset.addItem(CONFIG.get(section, 'preset_name'))

        self.fill_key_list()

    def set_preset_devices(self):
        """ When user choose another preset in combobox CbPreset

        this sub trying to find and assign devices from ini file
        to current device states

        """
        global CONFIG, CURRENT_PRESET_ID

        config_midi_device = CONFIG.get(CURRENT_PRESET_ID, 'midi_out')  # check and set config's midi device
        for index in range(0, self.CbMidiOut.count()):

            if self.CbMidiOut.itemText(index) == config_midi_device:
                self.CbMidiOut.setCurrentIndex(index)

        config_gamepad_device = CONFIG.get(CURRENT_PRESET_ID, 'gamepad_in')  # check and set config's joystick device
        for index in range(0, self.CbGamepad.count()):
            if self.CbGamepad.itemText(index) == config_gamepad_device:
                self.CbGamepad.setCurrentIndex(index)

    def preset_change(self, cur_id):
        """When user change preset in combobox CbPreset

        sub write preset name to global CURRENT_PRESET_NAME
        and call set_preset_devices()

        """

        global CONFIG, CURRENT_PRESET_ID

        CURRENT_PRESET_ID = str(cur_id)
        self.set_preset_devices()
        self.refresh_rate_change(int(CONFIG.get(CURRENT_PRESET_ID, 'refresh_rate')))
        self.fill_key_list()

    def refresh_rate_change(self, curindex):
        global REFRESH_RATE

        REFRESH_RATE = curindex
        self.LnRefreshRate.display(REFRESH_RATE)
        self.HsRefreshRate.setValue(REFRESH_RATE)

        self.changes_saved(True)

    def action_monitor_write(self, message: str = ''):
        self.LeActionMonitor.setText(message)

    def fill_key_list(self):
        global CONFIG, CURRENT_PRESET_ID, NOTE_TRIGGERS
        button_list = []
        self.CvKeyList.clear()
        NOTE_TRIGGERS.clear()

        preset_items =  CONFIG.items(CURRENT_PRESET_ID)
        for key, value in preset_items:
            if key[0:6] == 'button':
                button_list_parser = [element.strip("'[]") for element in value.split(", ")]
                button_list.append(button_list_parser)

        self.CvKeyList.setRowCount(len(button_list))        # строки в таблице
        for i_row in range(0, len(button_list)):
            NOTE_TRIGGERS.append(False)
            for i_column in range(0, len(button_list[i_row])):
                self.CvKeyList.setItem(i_row, i_column, QTableWidgetItem(button_list[i_row][i_column]))

        self.CvKeyList.setHorizontalHeaderLabels(["ID        ", "Key     ", "Type      ", "Function                     ", "Msg     ", "Cnl      "])
        self.CvKeyList.resizeColumnsToContents()
        self.CvKeyList.resizeRowsToContents()

    def timeloop(self):
        """
        Main background loop
        check events in Joystick stack and print it to MIDI
        ends when flag 'done' is true
        """
        global GAMEPAD_DEV, MIDI_DEV, EXIT_FLAG, CONFIG, CURRENT_PRESET_ID, REFRESH_RATE
        clock = pygame.time.Clock()

        while not EXIT_FLAG:

            pygame.joystick.Joystick(GAMEPAD_DEV).init()

            for event in pygame.event.get():  # User did something.
                if event.type == pygame.JOYBUTTONDOWN:
                    button = event.button
                    self.action_monitor_write('button ' + str(button))
                    # цикл проверки забиндена ли кнопка и выдача сигнала
                    for index in range(0, self.CvKeyList.rowCount()):
                        if self.CvKeyList.item(index, 1).text() == str(button):  # если кнопка забиндена
                            # проверяем функцию кнопки и отправляем миди команду
                            if self.CvKeyList.item(index, 3).text() == 'program_change': #  program_change
                                MIDI_DEV.set_instrument(int(self.CvKeyList.item(index, 4).text()))
                                self.action_monitor_write('program_change ' + self.CvKeyList.item(index, 4).text())
                            elif self.CvKeyList.item(index, 3).text() == 'control_change':
                                MIDI_DEV.note_on(int(self.CvKeyList.item(index, 4).text()), 127)
                                self.action_monitor_write('note_on ' + self.CvKeyList.item(index, 4).text())
                            elif self.CvKeyList.item(index, 3).text() == 'note_trigger':
                                if NOTE_TRIGGERS[index]:
                                    MIDI_DEV.note_off(int(self.CvKeyList.item(index, 4).text()))
                                    self.action_monitor_write('note_off ' + self.CvKeyList.item(index, 4).text())
                                else:
                                    MIDI_DEV.note_on(int(self.CvKeyList.item(index, 4).text()), 127)
                                    self.action_monitor_write('note_on ' + self.CvKeyList.item(index, 4).text())
                                NOTE_TRIGGERS[index] = not NOTE_TRIGGERS[index]

                elif event.type == pygame.JOYBUTTONUP:
                    button = event.button
                    # цикл проверки забиндена ли кнопка и выдача сигнала
                    for index in range(0, self.CvKeyList.rowCount()):
                        if self.CvKeyList.item(index, 1).text() == str(button):  # если кнопка забиндена
                            if self.CvKeyList.item(index, 3) == 'control_change':
                                MIDI_DEV.note_off(int(self.CvKeyList.item(index, 4).text()))
                                self.action_monitor_write('note_off ' + self.CvKeyList.item(index, 4).text())
                            else:
                                self.action_monitor_write()

            clock.tick(REFRESH_RATE)  # refresh rate delay
        self.dying()

    def closeEvent(self, event):
        """Event when user press X to close
        EXIT_FLAG: flag to exit timeloop()
        """
        global EXIT_FLAG

        if self.PbPresetSave.isEnabled():
            reply = QMessageBox.question(self, 'Exit', 'Save changes?',
                                         QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
            if reply == QMessageBox.Yes:
                self.save_preset()

        EXIT_FLAG = True
        event.accept()

    def dying(self, closemidi: bool = True):
        if closemidi:
            MIDI_DEV.close()
        pygame.quit()
        exit()

    def save_preset(self):
        """Save the config object to file

        Delete BUTTON keys from section CURRENT_PRESET_ID
        and write current parameters

        """
        global CONFIG, CURRENT_PRESET_ID, INI_NAME, MIDI_DEV_LIST, \
               GAMEPAD_DEV_LIST, GAMEPAD_DEV, REFRESH_RATE

        #CONFIG.remove_section(CURRENT_PRESET_ID)
        #CONFIG.add_section(CURRENT_PRESET_ID)

        preset_items = CONFIG.items(CURRENT_PRESET_ID)
        for key, value in preset_items:
            if key[0:6] == 'button':
                CONFIG.remove_option(CURRENT_PRESET_ID, key)



        CONFIG.set(CURRENT_PRESET_ID, 'preset_name', self.CbPreset.currentText())
        CONFIG.set(CURRENT_PRESET_ID, 'midi_out', self.CbMidiOut.currentText())
        CONFIG.set(CURRENT_PRESET_ID, 'gamepad_in', self.CbGamepad.currentText())
        CONFIG.set(CURRENT_PRESET_ID, 'refresh_rate', str(REFRESH_RATE))
        for i_row in range(self.CvKeyList.rowCount()):
            button_row_name = 'button'+str(i_row+1)
            button_row_text = '[' + self.CvKeyList.item(i_row,0).text() + \
                              ', ' + self.CvKeyList.item(i_row,1).text() + \
                              ', \'' + self.CvKeyList.item(i_row, 2).text() + \
                              '\', \'' + self.CvKeyList.item(i_row, 3).text() + \
                              '\', ' + self.CvKeyList.item(i_row, 4).text() + \
                              ', ' + self.CvKeyList.item(i_row,5).text() + ']'
            CONFIG.set(CURRENT_PRESET_ID, button_row_name, button_row_text)

        with open(INI_NAME, "w") as config_file:
            CONFIG.write(config_file)

        self.changes_saved(False)

    def ini_get_config(self, path):
        """Returns the config object

        :arg -- path - path (optional) and name of ini file

        """
        global CONFIG

        CONFIG = configparser.ConfigParser()
        if CONFIG.read(path):
            CONFIG.read(path)
        else:
            ini_not_found = QMessageBox.warning(self, 'Error', 'INI file not found')
            self.dying()

    def gamepad_load(self):
        """Gamepad devices initializing

        :returns global GAMEPAD_DEV_LIST[[id, 'name1'], [id, 'name2'] ... ]
        or [0, 'Gamepad not found']

        """
        global GAMEPAD_DEV_LIST

        pygame.init()

        gamepad_count = pygame.joystick.get_count()  # Get count of joysticks
        if gamepad_count > 0:
            for gamepad_port in range(0, gamepad_count):
                gamepad = pygame.joystick.Joystick(gamepad_port)
                GAMEPAD_DEV_LIST.append([gamepad.get_id(), gamepad.get_name()])
        else:
            gamepad_not_found = QMessageBox.warning(self,'Error', 'Gamepad not found')
            self.dying(False)

    def mididev_load(self):
        """MIDI devices initializing

        :returns global midi_dev_list[[port, 'name1'], [port, 'name2] ... ]
        or [0, 'Midi device not found']

        """
        global MIDI_DEV_LIST
        pygame.midi.init()

        midi_count = midi.get_count()
        flag = False

        if midi_count > 0:
            for midi_dev_port in range(0, midi_count - 1):
                midi_dev_info = midi.get_device_info(midi_dev_port)
                midi_dev_name = midi_dev_info[1].decode('utf-8')
                if midi_dev_info[3] == 1:  # если устройство вывода
                    MIDI_DEV_LIST.append([midi_dev_port, midi_dev_name])
                    flag = True
            if not flag:  # если нет устройства вывода
                midi_not_found = QMessageBox.warning(self, 'Error', 'MIDI device not found')
                self.dying()

    def mididev_change(self, curindex):
        """
        Assign chosen MIDI instance to midi_dev
        :param curindex: index of current device in midi_dev_list
        """
        global MIDI_DEV, MIDI_DEV_LIST
        MIDI_DEV = midi.Output(int(MIDI_DEV_LIST[curindex][0]))
        self.changes_saved(True)

    def gamepad_change(self, curindex):
        """
        Assign chosen Joystick id to gamepad_dev
        Reinitialize current gamepad
        :param curindex: index of current device in gamepad_dev_list
        """
        global GAMEPAD_DEV
        pygame.joystick.Joystick(curindex).init()  # new device
        pygame.joystick.Joystick(GAMEPAD_DEV).quit()  # old device
        GAMEPAD_DEV = curindex  # old = new

        self.changes_saved(True)

    def changes_saved(self, flag: bool = True):
        if flag:
            self.PbPresetSave.setEnabled(True)
        else:
            self.PbPresetSave.setDisabled(True)
Ejemplo n.º 28
0
class GamePage(QWidget):
    changePixmapItem = pyqtSignal(QImage)
    renderSignal = pyqtSignal()
    timeSignal = pyqtSignal()
    gameEnd = pyqtSignal()
    maxEmojiNum = 8
    maxEmojiGen = 1
    maxX = 550
    maxY = 450
    myOffsetX = 650
    myOffsetY = 50
    duration = 30
    shift = 4
    width = 1300
    height = 800

    def __init__(self, isServer, ip, camera, musicPlayer):
        self.__status = 0  # 0: not started, 1: started, 2: ended
        super(GamePage, self).__init__()
        self.resize(self.width, self.height)
        self.setWindowTitle("Game Page")
        self.setFixedSize(self.size())
        self.changePixmapItem.connect(self.setFaceImage)
        self.renderSignal.connect(self.__renderEmojiAction)
        self.timeSignal.connect(self.__displayTimeAction)
        self.gameEnd.connect(self.__finalResult)
        self.__isServer = isServer
        self.__ip = ip
        self.__myScore = 0
        self.__enemyScore = 0

        self.createLCD()
        self.__graphicsView = QGraphicsView(self)
        self.__graphicsView.setGeometry(QRect(0, 160, 1300, 600))
        self.__graphicsView.setStyleSheet(
            "background: transparent; border:0px")
        self.__scene = QGraphicsScene(self)
        self.__scene.setSceneRect(0, 0, 1250, 550)
        self.__graphicsView.setScene(self.__scene)
        self.__faceImage = QGraphicsPixmapItem()
        self.__faceImage.setPos(-10, 50)
        self.__scene.addItem(self.__faceImage)
        palette = QPalette()
        palette.setBrush(QPalette.Background,
                         QBrush(QPixmap("resources/game_background.jpg")))
        self.setPalette(palette)
        self.__matchedEmoji = Emoji.NONE
        self.__emojiList = []
        self.__myEmojiList = []
        self.__myEmojiListLock = threading.Lock()
        self.__port = 8080
        self.__net = NetModule(self)

        self.__camera = camera
        self.__camera.setFPS(5)
        self.__camera.capture()
        self.__convertFaceImage()
        self.__musicPlayer = musicPlayer
        # self.__musicPlayer.stop()
        filepath = 'resources/gameMusic.mp3'
        fullpath = os.path.join(os.getcwd(), filepath)
        url = QtCore.QUrl.fromLocalFile(fullpath)
        self.__content = QtMultimedia.QMediaContent(url)

        self.__runner = threading.Thread(target=self.startGame)
        self.__runner.start()

    def createLCD(self):
        myLCD_style = """
            QLCDNumber {
                background-color: rgb(0, 0, 0);
                border: 2px solid rgb(113, 113, 113);
                border-width: 2px;
                border-radius: 15px;
                color: rgb(42, 232, 35);
            }
        """
        enemyLCD_style = """
            QLCDNumber {
                background-color: rgb(0, 0, 0);
                border: 2px solid rgb(113, 113, 113);
                border-width: 2px;
                border-radius: 15px;
                color: rgb(232, 35, 35);
            }
        """
        timeLCD_style = """
            QLCDNumber {
                background-color: rgb(0, 0, 0);
                border: 2px solid rgb(113, 113, 113);
                border-width: 2px;
                border-radius: 20px;
                color: rgb(255, 255, 255);
            }
        """
        self.__timeLCD = QLCDNumber(self)
        self.__timeLCD.setGeometry(QRect(560, 55, 200,
                                         100))  #(QRect(580, 55, 140, 100))
        self.__timeLCD.setStyleSheet(timeLCD_style)
        self.__enemyScoreLCD = QLCDNumber(self)
        self.__enemyScoreLCD.setGeometry(QRect(900, 80, 140, 70))
        self.__enemyScoreLCD.setStyleSheet(enemyLCD_style)
        self.__myScoreLCD = QLCDNumber(self)
        self.__myScoreLCD.setGeometry(QRect(270, 80, 140, 70))
        self.__myScoreLCD.setStyleSheet(myLCD_style)

    def startGame(self):
        try:
            if self.__isServer == True:
                self.__net.listen(self.__port)
            else:
                self.__net.connect(self.__ip, self.__port)
            self.__camera.predict()
            self.__status = 1
            self.__startTime = time.time()
            self.__displayTime()
            self.__action()
            self.__renderEmoji()
            self.__musicPlayer.setMedia(self.__content)
            # self.__musicplayer.setVolume(50.0)
            self.__musicPlayer.play()
        except Exception as e:
            print('error in startGame():', e)

    def __action(self):
        if self.__status == 2:  # game ended
            data = 'final\n' + str(self.__myScore) + '\n'
            try:
                self.__net.sendData(data)
            except:
                pass
            self.__musicPlayer.stop()
            return
        try:
            if self.__isServer == True:
                # remove emoji if its status is 2 (out)
                i = 0
                self.__myEmojiListLock.acquire()
                while i < len(self.__myEmojiList):
                    if self.__myEmojiList[i].getStatus() == 2:
                        del self.__myEmojiList[i]
                        continue
                    i = i + 1

                # randomly generate emoji and append to myEmojiList
                self.__randomGenEmoji()
                for emoji in self.__emojiList:
                    newEmoji = Emoji(emoji.getX() + self.myOffsetX,
                                     emoji.getY() + self.myOffsetY,
                                     emoji.getType())
                    self.__myEmojiList.append(newEmoji)
                self.__myEmojiListLock.release()

                # send new emojiList
                data = 'new\n'
                for emoji in self.__emojiList:
                    data = data + emoji.toString() + '\n'
                self.__net.sendData(data)

                #  send our score
                data = 'score\n' + str(self.__myScore) + '\n'
                self.__net.sendData(data)
            else:
                # remove emoji if its status is 2 (out)
                i = 0
                self.__myEmojiListLock.acquire()
                while i < len(self.__myEmojiList):
                    if self.__myEmojiList[i].getStatus() == 2:
                        del self.__myEmojiList[i]
                        continue
                    i = i + 1
                self.__myEmojiListLock.release()

                # send score to enemy
                data = 'score\n' + str(self.__myScore) + '\n'
                self.__net.sendData(data)
            self.__actioner = threading.Timer(0.8, self.__action)
            self.__actioner.start()
        except Exception as e:
            print('error in __action():', e)

    # set result that predicted by image module
    def setResult(self, emojiType):
        self.__matchedEmoji = emojiType

    # set face image which is obtained from webcam
    def __convertFaceImage(self):
        if (self.__camera.frame.size != 0):
            rgbImage = cv2.cvtColor(self.__camera.frame, cv2.COLOR_BGR2RGB)
            h, w, ch = rgbImage.shape
            bytesPerLine = ch * w
            convertToQtFormat = QImage(rgbImage.data, w, h, bytesPerLine,
                                       QImage.Format_RGB888)
            p = convertToQtFormat.scaled(640, 480,
                                         Qt.KeepAspectRatio)  #(640,480) #
            self.changePixmapItem.emit(p)
            self.__CFIRunner = threading.Timer(0.04, self.__convertFaceImage)
            self.__CFIRunner.start()

    @pyqtSlot(QImage)
    def setFaceImage(self, image):
        self.__faceImage.setPixmap(QPixmap.fromImage(image))
        self.setResult(self.__camera.state)

    def __renderEmoji(self):
        self.renderSignal.emit()
        self.__renderEmojiRunner = threading.Timer(0.02, self.__renderEmoji)
        self.__renderEmojiRunner.start()

    @pyqtSlot()
    def __renderEmojiAction(self):
        if self.__status == 1:
            self.__myEmojiListLock.acquire()
            for emoji in self.__myEmojiList:
                self.setEmoji(emoji)
            self.__myEmojiListLock.release()

    def __displayTime(self):
        self.__elapseTime = time.time() - self.__startTime
        self.timeSignal.emit()
        if int(self.__elapseTime) >= self.duration:
            self.__status = 2

            return
        self.__displayTimeRunner = threading.Timer(1, self.__displayTime)
        self.__displayTimeRunner.start()

    @pyqtSlot()
    def __displayTimeAction(self):
        self.__timeLCD.display(self.duration - int(self.__elapseTime))

    # set emoji or add emoji on screen
    def setEmoji(self, e):
        if e.getStatus() == 0:  # new
            e.graphicPixmapItem = QGraphicsPixmapItem()
            e.graphicPixmapItem.setPixmap(e.getPic().scaled(50, 50))
            e.graphicPixmapItem.setPos(e.getX(), e.getY())
            e.setStatus(1)
            self.__scene.addItem(e.graphicPixmapItem)
        elif e.getStatus() == 1:  # exist
            e.setY(e.getY() + self.shift)
            e.graphicPixmapItem.setPos(e.getX(), e.getY())
            if e.getY() > self.myOffsetY + self.maxY:
                e.setStatus(2)
                self.__scene.removeItem(e.graphicPixmapItem)
            elif e.getType() == self.__matchedEmoji:
                self.__myScore = self.__myScore + 10
                self.__myScoreLCD.display(self.__myScore)
                e.setStatus(2)
                self.__scene.removeItem(e.graphicPixmapItem)
        else:  # out
            pass
        self.__enemyScoreLCD.display(self.__enemyScore)

    def __randomGenEmoji(self):
        if len(self.__emojiList) >= self.maxEmojiNum:
            return
        else:
            tempList = []
            for i in range(self.maxEmojiGen):
                tempList.append(
                    Emoji(random.randint(0, self.maxX), 0,
                          random.randint(1, Emoji.SURPRISE)))
            self.__emojiList = tempList

    def myEmojiAdd(self, emoji):
        self.__myEmojiListLock.acquire()
        self.__myEmojiList.append(emoji)
        self.__myEmojiListLock.release()

    def setEnemyScore(self, score):
        self.__enemyScore = score

    @pyqtSlot()
    def __finalResult(self):
        if self.__myScore > self.__enemyScore:  # win
            pixmap = QPixmap("resources/win.png")
            QGPI = QGraphicsPixmapItem()
            QGPI.setPixmap(pixmap)
            QGPI.setPos(150, 160)
            self.__scene.addItem(QGPI)

        elif self.__myScore < self.__enemyScore:  # lose
            pixmap = QPixmap("resources/lose.png")
            QGPI = QGraphicsPixmapItem()
            QGPI.setPixmap(pixmap)
            QGPI.setPos(100, 160)
            self.__scene.addItem(QGPI)
        else:
            pixmap = QPixmap("resources/tie.png")
            QGPI = QGraphicsPixmapItem()
            QGPI.setPixmap(pixmap)
            QGPI.setPos(150, 160)
            self.__scene.addItem(QGPI)
        if hasattr(self, '_GamePage__actioner'):
            self.__actioner.cancel()
        if hasattr(self, '_GamePage__renderEmojiRunner'):
            self.__renderEmojiRunner.cancel()
        if hasattr(self, '_GamePage__displayTimeRunner'):
            self.__displayTimeRunner.cancel()
        if hasattr(self, '_GamePage__CFIRunner'):
            self.__CFIRunner.cancel()
        self.__camera.stop()
        self.__camera.release()
        if hasattr(self.__camera, 'captureThread'):
            self.__camera.captureThread.cancel()
        if hasattr(self.__camera, 'predictThread'):
            self.__camera.predictThread.cancel()
        try:
            self.__net.close()
        except:
            pass

    def printEmojiList(self):
        print('len: ', len(self.__myEmojiList))
        for emoji in self.__myEmojiList:
            print('{},{} {}'.format(emoji.getX(), emoji.getY(),
                                    emoji.getType()))

    def closeEvent(self, event):
        if hasattr(self, '_GamePage__actioner'):
            self.__actioner.cancel()
        if hasattr(self, '_GamePage__renderEmojiRunner'):
            self.__renderEmojiRunner.cancel()
        if hasattr(self, '_GamePage__displayTimeRunner'):
            self.__displayTimeRunner.cancel()
        self.__status = 2
        if self.__net.isListening():
            self.__net.stopListen()

        if hasattr(self, '_GamePage__CFIRunner'):
            self.__CFIRunner.cancel()
        self.__camera.stop()
        self.__camera.release()
        if hasattr(self.__camera, 'captureThread'):
            self.__camera.captureThread.cancel()
        if hasattr(self.__camera, 'predictThread'):
            self.__camera.predictThread.cancel()

        try:
            self.__net.close()
        except:
            pass
        event.accept()
Ejemplo n.º 29
0
class Trigan_Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        global TIMER, COUNT_ARRAY
        global TIME_COUNT, array

        TIMER = 1

        self.f_r = open("info", mode='r')
        self.frm = QFrame(self)
        self.frm.setStyleSheet("QWidget { background-color: %s }" %
                               self.f_r.read(7))
        self.frm.setGeometry(0, 0, 2000, 1000)

        self.setGeometry(400, 200, 500, 450)
        self.setWindowTitle('Формулы приведения')

        con = sqlite3.connect("name_users.db")
        cur = con.cursor()

        self.answer_name_label = QLabel(self)
        self.answer_name_label.setText("Введите ваш ответ: ")
        self.answer_name_label.resize(250, 50)
        self.answer_name_label.move(0, 380)
        self.f_r.seek(14)
        self.answer_name_label.setStyleSheet("QLabel {color: %s;}" %
                                             self.f_r.read(7))

        self.rec_btn = QPushButton('Следующий', self)
        self.rec_btn.resize(480, 170)
        self.rec_btn.move(10, 200)
        self.f_r.seek(7)
        self.rec_btn.setStyleSheet(
            "QPushButton { background-color: %s; border: %s; color: %s}" %
            (self.f_r.read(7), None, self.f_r.read(7)))
        self.f_r.close()

        font = QtGui.QFont()
        font.setPointSize(17)
        self.rec_btn.setFont(font)

        self.rec_btn.clicked.connect(self.recursion)

        result = cur.execute("""SELECT * FROM Trigonometry
                                                            WHERE Way like '%'"""
                             )
        if COUNT_ARRAY == 0:
            array = list(result)
            random.shuffle(array)

        self.true_answers = []
        self.player_answers = []

        self.way = array[COUNT_ARRAY]
        self.true_answers.append(self.way[1])

        self.pixmap = QPixmap(self.way[0])
        self.image = QLabel(self)
        self.image.move(85, 10)
        self.image.resize(330, 160)
        self.image.setPixmap(self.pixmap)

        self.answer_input = QLineEdit(self)
        self.answer_input.resize(150, 30)
        self.answer_input.move(160, 390)

        self.player_answers.append(self.answer_input.text())

        self.lcdNumber = QLCDNumber(self)
        self.lcdNumber.setGeometry(QtCore.QRect(0, 0, 80, 35))
        self.lcdNumber.move(400, 390)
        self.lcdNumber.setNumDigits(5)
        self.str1 = "{:0>2d}:{:0>2d}".format(begin // 60, begin % 60)
        self.lcdNumber.display(self.str1)

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.showTime)
        self.timer.start(1000)

        con.commit()
        con.close()

    def recursion(self):
        global COUNT_TRIES_EQUATIONS, begin
        global COUNT_TRUES_EQUATIONS, COUNT_ARRAY

        self.timer.stop()

        if str(self.answer_input.text()) == str(self.true_answers[-1]):
            COUNT_TRUES_EQUATIONS += 1

        COUNT_TRIES_EQUATIONS += 1
        COUNT_ARRAY += 1

        if COUNT_TRIES_EQUATIONS < 32:
            self.rec_form = Trigan_Window()
            self.rec_form.show()
            self.close()
        else:
            COUNT_ARRAY = 0
            self.res_form = Trigan_Result_Window()
            self.res_form.show()
            self.close()

    def showTime(self):
        global begin
        begin = begin + 1
        self.str1 = "{:0>2d}:{:0>2d}:{:0>2d}".format(begin // 3600,
                                                     (begin % 3600) // 60,
                                                     begin % 60)
        self.lcdNumber.display(self.str1)
Ejemplo n.º 30
0
class Sampling_Creator_Main_Class(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.height_of_screen = QDesktopWidget().availableGeometry().height()
        self.width_of_screen = QDesktopWidget().availableGeometry().width()

        self.path_to_pull = str(
            QFileDialog.getExistingDirectory(self, 'Select Directory'))
        self.list_dir = os.listdir(self.path_to_pull)
        self.list_dir_iterator = 0
        self.path_to_push = None

        self.tmp_im = cv2.imread(self.path_to_pull + '/' +
                                 self.list_dir[self.list_dir_iterator])
        self.tmp_im_non_rotated = self.tmp_im.copy()

        self.create_lables()
        self.create_LCD_numbers()
        self.create_sliders()
        self.create_picture()
        self.create_buttons()
        self.statusBar()

        self.setWindowTitle('Sampling Creator')
        self.setGeometry(self.norm(1, 'w'), self.norm(5, 'h'),
                         self.norm(98, 'w'), self.norm(93, 'h'))
        self.show()

    def create_lables(self):
        self.label_H = QLabel('Hue', self)
        self.label_H.setGeometry(self.norm(2, 'w'), self.norm(1, 'h'),
                                 self.norm(3, 'w'), self.norm(3, 'h'))

        self.label_L = QLabel('Lightness', self)
        self.label_L.setGeometry(self.norm(6, 'w'), self.norm(1, 'h'),
                                 self.norm(3, 'w'), self.norm(3, 'h'))

        self.label_S = QLabel('Saturation', self)
        self.label_S.setGeometry(self.norm(10, 'w'), self.norm(1, 'h'),
                                 self.norm(3, 'w'), self.norm(3, 'h'))

        self.label_A = QLabel('Angle', self)
        self.label_A.setGeometry(self.norm(14, 'w'), self.norm(1, 'h'),
                                 self.norm(3, 'w'), self.norm(3, 'h'))

    def create_LCD_numbers(self):
        self.num_H = QLCDNumber(self)
        self.num_H.setGeometry(self.norm(2, 'w'), self.norm(87, 'h'),
                               self.norm(3, 'w'), self.norm(3, 'h'))

        self.num_L = QLCDNumber(self)
        self.num_L.setGeometry(self.norm(6, 'w'), self.norm(87, 'h'),
                               self.norm(3, 'w'), self.norm(3, 'h'))

        self.num_S = QLCDNumber(self)
        self.num_S.setGeometry(self.norm(10, 'w'), self.norm(87, 'h'),
                               self.norm(3, 'w'), self.norm(3, 'h'))

        self.num_A = QLCDNumber(self)
        self.num_A.setGeometry(self.norm(14, 'w'), self.norm(87, 'h'),
                               self.norm(3, 'w'), self.norm(3, 'h'))

    def create_sliders(self):
        self.sld_H = QSlider(Qt.Vertical, self)
        self.sld_L = QSlider(Qt.Vertical, self)
        self.sld_S = QSlider(Qt.Vertical, self)
        self.sld_A = QSlider(Qt.Vertical, self)

        self.sld_H.setMinimum(-179)
        self.sld_H.setMaximum(179)
        self.sld_H.setValue(0)
        self.sld_H.setFocusPolicy(Qt.StrongFocus)
        self.sld_H.setTickPosition(QSlider.TicksBothSides)
        self.sld_H.setTickInterval(30)
        self.sld_H.setSingleStep(1)
        self.sld_H.valueChanged[int].connect(self.changeValue_H)
        self.sld_H.valueChanged[int].connect(self.num_H.display)
        self.sld_H.setGeometry(self.norm(2, 'w'), self.norm(5, 'h'),
                               self.norm(3, 'w'), self.norm(81, 'h'))

        self.sld_L.setMinimum(-257)
        self.sld_L.setMaximum(257)
        self.sld_L.setValue(0)
        self.sld_L.setFocusPolicy(Qt.StrongFocus)
        self.sld_L.setTickPosition(QSlider.TicksBothSides)
        self.sld_L.setTickInterval(43)
        self.sld_L.setSingleStep(1)
        self.sld_L.valueChanged[int].connect(self.changeValue_L)
        self.sld_L.valueChanged[int].connect(self.num_L.display)
        self.sld_L.setGeometry(self.norm(6, 'w'), self.norm(5, 'h'),
                               self.norm(3, 'w'), self.norm(81, 'h'))

        self.sld_S.setMinimum(-257)
        self.sld_S.setMaximum(257)
        self.sld_S.setValue(0)
        self.sld_S.setFocusPolicy(Qt.StrongFocus)
        self.sld_S.setTickPosition(QSlider.TicksBothSides)
        self.sld_S.setTickInterval(43)
        self.sld_S.setSingleStep(1)
        self.sld_S.valueChanged[int].connect(self.changeValue_S)
        self.sld_S.valueChanged[int].connect(self.num_S.display)
        self.sld_S.setGeometry(self.norm(10, 'w'), self.norm(5, 'h'),
                               self.norm(3, 'w'), self.norm(81, 'h'))

        self.sld_A.setMinimum(-180)
        self.sld_A.setMaximum(180)
        self.sld_A.setValue(0)
        self.sld_A.setFocusPolicy(Qt.StrongFocus)
        self.sld_A.setTickPosition(QSlider.TicksBothSides)
        self.sld_A.setTickInterval(30)
        self.sld_A.setSingleStep(1)
        self.sld_A.valueChanged[int].connect(self.changeValue_A)
        self.sld_A.valueChanged[int].connect(self.num_A.display)
        self.sld_A.setGeometry(self.norm(14, 'w'), self.norm(5, 'h'),
                               self.norm(3, 'w'), self.norm(81, 'h'))

        self.old_value_H = 0
        self.old_value_L = 0
        self.old_value_S = 0

    def create_picture(self):
        self.picture = QLabel(self)

        self.pixmap = QPixmap(self.path_to_pull + '/' +
                              self.list_dir[self.list_dir_iterator])
        self.picture.setPixmap(
            self.pixmap.scaled(self.norm(78, 'w'), self.norm(87, 'h'),
                               Qt.KeepAspectRatio))

        self.picture.setGeometry(self.norm(18, 'w'), self.norm(1, 'h'),
                                 self.norm(78, 'w'), self.norm(87, 'h'))

    def create_buttons(self):
        self.btn_previous = QPushButton('Previous', self)
        self.btn_next = QPushButton('Next', self)
        self.btn_save = QPushButton('Save', self)

        self.btn_previous.clicked.connect(self.buttonClicked)
        self.btn_next.clicked.connect(self.buttonClicked)
        self.btn_save.clicked.connect(self.buttonClicked)

        self.btn_previous.setGeometry(self.norm(20, 'w'), self.norm(89, 'h'),
                                      self.norm(3, 'w'), self.norm(3, 'h'))
        self.btn_next.setGeometry(self.norm(55, 'w'), self.norm(89, 'h'),
                                  self.norm(3, 'w'), self.norm(3, 'h'))
        self.btn_save.setGeometry(self.norm(90, 'w'), self.norm(89, 'h'),
                                  self.norm(3, 'w'), self.norm(3, 'h'))

        self.btn_save_was_clicked = False
        self.btn_next_or_prev_was_clicked = False

    def changeValue_H(self, value):
        if (self.btn_next_or_prev_was_clicked == False):
            hls_im = cv2.cvtColor(self.tmp_im, cv2.COLOR_RGB2HLS)
            hls_im[:, :, 0] = hls_im[:, :, 0] + value - self.old_value_H
            self.tmp_im = cv2.cvtColor(hls_im, cv2.COLOR_HLS2RGB)

            hls_im = cv2.cvtColor(self.tmp_im_non_rotated, cv2.COLOR_RGB2HLS)
            hls_im[:, :, 0] = hls_im[:, :, 0] + value - self.old_value_H
            self.tmp_im_non_rotated = cv2.cvtColor(hls_im, cv2.COLOR_HLS2RGB)

            self.old_value_H = value

            cv2.imwrite('tmp_im.jpg', self.tmp_im)
            self.picture.setPixmap(
                QPixmap('tmp_im.jpg').scaled(self.norm(78, 'w'),
                                             self.norm(87, 'h'),
                                             Qt.KeepAspectRatio))

    def changeValue_L(self, value):
        if (self.btn_next_or_prev_was_clicked == False):
            hls_im = cv2.cvtColor(self.tmp_im, cv2.COLOR_RGB2HLS)
            hls_im[:, :, 1] = hls_im[:, :, 1] + value - self.old_value_L
            self.tmp_im = cv2.cvtColor(hls_im, cv2.COLOR_HLS2RGB)

            hls_im = cv2.cvtColor(self.tmp_im_non_rotated, cv2.COLOR_RGB2HLS)
            hls_im[:, :, 1] = hls_im[:, :, 1] + value - self.old_value_L
            self.tmp_im_non_rotated = cv2.cvtColor(hls_im, cv2.COLOR_HLS2RGB)

            self.old_value_L = value

            cv2.imwrite('tmp_im.jpg', self.tmp_im)
            self.picture.setPixmap(
                QPixmap('tmp_im.jpg').scaled(self.norm(78, 'w'),
                                             self.norm(87, 'h'),
                                             Qt.KeepAspectRatio))

    def changeValue_S(self, value):
        if (self.btn_next_or_prev_was_clicked == False):
            hls_im = cv2.cvtColor(self.tmp_im, cv2.COLOR_RGB2HLS)
            hls_im[:, :, 2] = hls_im[:, :, 2] + value - self.old_value_S
            self.tmp_im = cv2.cvtColor(hls_im, cv2.COLOR_HLS2RGB)

            hls_im = cv2.cvtColor(self.tmp_im_non_rotated, cv2.COLOR_RGB2HLS)
            hls_im[:, :, 2] = hls_im[:, :, 2] + value - self.old_value_S
            self.tmp_im_non_rotated = cv2.cvtColor(hls_im, cv2.COLOR_HLS2RGB)

            self.old_value_S = value

            cv2.imwrite('tmp_im.jpg', self.tmp_im)
            self.picture.setPixmap(
                QPixmap('tmp_im.jpg').scaled(self.norm(78, 'w'),
                                             self.norm(87, 'h'),
                                             Qt.KeepAspectRatio))

    def changeValue_A(self, value):
        if (self.btn_next_or_prev_was_clicked == False):
            self.tmp_im = self.rotate_bound(self.tmp_im_non_rotated, value)

            cv2.imwrite('tmp_im.jpg', self.tmp_im)
            self.picture.setPixmap(
                QPixmap('tmp_im.jpg').scaled(self.norm(78, 'w'),
                                             self.norm(87, 'h'),
                                             Qt.KeepAspectRatio))

    def buttonClicked(self):
        sender = self.sender()
        if (sender.text() == 'Next'
                and self.list_dir_iterator < len(self.list_dir) - 1):
            self.list_dir_iterator += 1
            self.btn_next_or_prev_was_clicked = True

            self.tmp_im = cv2.imread(self.path_to_pull + '/' +
                                     self.list_dir[self.list_dir_iterator])
            self.tmp_im_non_rotated = self.tmp_im.copy()
            self.picture.setPixmap(
                QPixmap(self.path_to_pull + '/' +
                        self.list_dir[self.list_dir_iterator]).scaled(
                            self.norm(78, 'w'), self.norm(87, 'h'),
                            Qt.KeepAspectRatio))

            self.sld_H.setValue(0)
            self.sld_L.setValue(0)
            self.sld_S.setValue(0)
            self.sld_A.setValue(0)

            self.btn_next_or_prev_was_clicked = False

        elif (sender.text() == 'Previous' and self.list_dir_iterator > 0):
            self.list_dir_iterator -= 1
            self.btn_next_or_prev_was_clicked = True

            self.tmp_im = cv2.imread(self.path_to_pull + '/' +
                                     self.list_dir[self.list_dir_iterator])
            self.tmp_im_non_rotated = self.tmp_im.copy()
            self.picture.setPixmap(
                QPixmap(self.path_to_pull + '/' +
                        self.list_dir[self.list_dir_iterator]).scaled(
                            self.norm(78, 'w'), self.norm(87, 'h'),
                            Qt.KeepAspectRatio))

            self.sld_H.setValue(0)
            self.sld_L.setValue(0)
            self.sld_S.setValue(0)
            self.sld_A.setValue(0)

            self.btn_next_or_prev_was_clicked = False

        elif (sender.text() == 'Save'):
            if (self.btn_save_was_clicked == False):
                self.btn_save_was_clicked = True
                self.path_to_push = str(
                    QFileDialog.getExistingDirectory(self, 'Select Directory'))

            cv2.imwrite(
                self.path_to_push + '/' +
                self.list_dir[self.list_dir_iterator], self.tmp_im)

        self.statusBar().showMessage(sender.text() + ' was pressed')

    def rotate_bound(self, image, angle):
        # grab the dimensions of the image and then determine the
        # center
        (h, w) = image.shape[:2]
        (cX, cY) = (w // 2, h // 2)
        # grab the rotation matrix (applying the negative of the
        # angle to rotate clockwise), then grab the sine and cosine
        # (i.e., the rotation components of the matrix)
        M = cv2.getRotationMatrix2D((cX, cY), -angle, 1.0)
        cos = np.abs(M[0, 0])
        sin = np.abs(M[0, 1])
        # compute the new bounding dimensions of the image
        nW = int((h * sin) + (w * cos))
        nH = int((h * cos) + (w * sin))
        # adjust the rotation matrix to take into account translation
        M[0, 2] += (nW / 2) - cX
        M[1, 2] += (nH / 2) - cY
        # perform the actual rotation and return the image
        return cv2.warpAffine(image, M, (nW, nH))

    def norm(self, per, height_or_width):
        # per is from 0 to 100
        if (height_or_width == 'h'):
            return int(per * self.height_of_screen / 100)
        elif (height_or_width == 'w'):
            return int(per * self.width_of_screen / 100)