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)
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)
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)
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()
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()
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()
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()
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)
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)
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()
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()
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()
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"))
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)
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()
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()
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
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", "设置"))
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()
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)
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())
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
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", " Почему появляется ошибка?"))
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)
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)
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()
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)
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)