Exemplo n.º 1
1
    def addLCDNumbers(self):
        fortLCD = QLCDNumber(1, self)
        fortLCD.setFrameShape(QFrame.NoFrame)
        fortLCD.move(125, 50)
        fortLCD.resize(40, 40)
        fortLCD.display(self.square.ter.buildings.fort_lvl)
        incomeLCD = QLCDNumber(2, self)
        incomeLCD.setFrameShape(QFrame.NoFrame)
        incomeLCD.move(117, 10)
        incomeLCD.resize(40, 40)
        incomeLCD.display(self.square.ter.get_income())
        marketLCD = QLCDNumber(1, self)
        marketLCD.setFrameShape(QFrame.NoFrame)
        marketLCD.move(125, 90)
        marketLCD.resize(40, 40)
        marketLCD.display(self.square.ter.buildings.market_lvl)

        self.square.incomeChanged.connect(incomeLCD.display)
        self.square.fortUpgr.connect(fortLCD.display)
        self.square.marketUpgr.connect(marketLCD.display)
Exemplo n.º 2
0
    def __init__(self, parent=None):
        super(LdcSettingsWindow, self).__init__(parent)

        label_current_limit_info = QLabel("Laser current limit in mA", self)
        label_current_limit_info.move(80, 15)

        display_current_limit = QLCDNumber(self)
        display_current_limit.move(50, 40)
        display_current_limit.resize(180, 50)

        self.slider_to_change_current_limit = QSlider(Qt.Horizontal, self)
        self.slider_to_change_current_limit.move(250, 60)
        self.slider_to_change_current_limit.setMaximum(200)
        self.slider_to_change_current_limit.valueChanged.connect(
            display_current_limit.display)

        button_to_set_current_limit = QPushButton(self)
        button_to_set_current_limit.setText("Set current limit")
        button_to_set_current_limit.move(380, 40)
        button_to_set_current_limit.resize(150, 50)
        button_to_set_current_limit.clicked.connect(self.set_current_limit)

        try:
            display_current_limit.display(
                MeasureDeviceConnect.ldc.get_current_limit_in_amper() * 1000)
        except Exception:
            pass

        self.setGeometry(600, 600, 600, 600)
        self.setWindowTitle('Ldc settings')
Exemplo n.º 3
0
 def addNumbers(self):
     cavNum = QLCDNumber(2, self)
     self.cavSld.valueChanged.connect(cavNum.display)
     self.cavSld.setValue(99)
     cavNum.resize(60, 40)
     cavNum.move(150, 60)
     infNum = QLCDNumber(2, self)
     self.infSld.valueChanged.connect(infNum.display)
     self.infSld.setValue(99)
     infNum.resize(60, 40)
     infNum.move(0, 60)
Exemplo n.º 4
0
 def addIncomeInfo(self, font):
     '''
     Adds the income LCDNumber and connects it with the correct signals.
     '''
     incomeLbl = QLabel("Income:", self)
     incomeLbl.setFont(font)
     incomeLbl.move(460, 10)
     incomeLcd = QLCDNumber(3, self)
     incomeLcd.move(530, 0)
     incomeLcd.setFrameShape(QFrame.NoFrame)
     incomeLcd.resize(60, 40)
     self.sig.incomeChanged.connect(incomeLcd.display)
     self.sig.incomeChanged.emit(self.game.player.income())
Exemplo n.º 5
0
 def addGoldInfo(self, font):
     '''
     Adds gold LCDNumber and connects it with the correct signal.
     '''
     goldLbl = QLabel('Gold:', self)
     goldLbl.move(300, 10)
     goldLbl.setFont(font)
     goldLcd = QLCDNumber(4, self)
     goldLcd.move(360, 0)
     goldLcd.setFrameShape(QFrame.NoFrame)
     goldLcd.resize(65, 40)
     self.sig.goldChanged.connect(goldLcd.display)
     self.sig.goldChanged.emit(self.game.player.gold)
Exemplo n.º 6
0
 def addMaintInfo(self, font):
     '''
     Adds maintenance QLCDNumber and connects it with the correct signals.
     '''
     maintLbl = QLabel("Total maintenance:", self)
     maintLbl.move(620, 10)
     maintLbl.setFont(font)
     maintLcd = QLCDNumber(3, self)
     maintLcd.move(840, 7)
     maintLcd.setFrameShape(QFrame.NoFrame)
     maintLcd.resize(50, 30)
     self.sig.maintChanged.connect(maintLcd.display)
     maint = self.game.player.get_armies_maint()
     self.sig.maintChanged.emit(maint[0] + maint[1])
Exemplo n.º 7
0
class Soc(QWidget):
    def __init__(self, parent):

        super(Soc, self).__init__(parent)

        self.arguments = Arg_Class()

        self.socValue = 0.0

        self.socLCD = QLCDNumber(self)
        self.socLCD.display(
            str(int(self.socValue)).zfill(4) + '.' +
            str((self.socValue - int(self.socValue)) * 10).zfill(4))
        self.socLCD.setFrameShape(QFrame.NoFrame)
        self.socLCD.setSegmentStyle(QLCDNumber.Flat)
        #self.socLCD.move(30,100)
        self.socLCD.move(0, 20)
        self.socLCD.resize(70, 80)

        self.socLabel = QLabel(self)
        self.socLabel.setText("soc: ")
        self.socLabel.move(10, 10)
        self.socLCD.show()
        self.socLabel.show()

    @pyqtSlot(float)
    def soc_update(self, value):
        if value < 0:
            value = 0
        self.socLCD.display(value)
        self.socValue = value
        self.update()
        #self.socGauge.display(str(int(self.socValue)).zfill(2)+'.'+ str((self.socValue - int(self.socValue))*10).zfill(2))

    def paintEvent(self, event):
        qp = QPainter(self)
        qp.setPen(Qt.white)

        qp.drawRect(70, 20, 70, 180)
        qp.drawRect(96, 10, 20, 10)
        if self.socValue < 0:
            self.socValue = 0
        if self.socValue < 20:
            qp.setBrush(Qt.red)
        else:
            qp.setBrush(Qt.green)

        qp.drawRect(70, 20 + (180 * (1 - (self.socValue / 100))), 70,
                    ((180 * self.socValue / 100)))
Exemplo n.º 8
0
class WinForm(QWidget):
    def __init__(self, parent=None):
        super(WinForm, self).__init__(parent)
        self.setGeometry(300, 300, 350, 350)
        self.setWindowTitle('Sentiment Analysis')
        self.Run = QPushButton('Run', self)
        self.Run.setGeometry(250, 100, 80, 40)
        self.Run.setStyleSheet("background-color: green")
        self.Run.clicked.connect(self.run)

        self.Inf = QLabel(self)
        self.Inf.move(40, 40)
        self.Inf.resize(200, 40)
        self.Inf.setText('Please type in something')

        self.Inline = QLineEdit(self)
        self.Inline.move(40, 100)
        self.Inline.resize(200, 40)

        self.Outline = QLCDNumber(self)
        self.Outline.move(90, 170)
        self.Outline.resize(150, 80)
        self.Outline.setDigitCount(2)
        self.Outline.display(00)

        self.Run.setDisabled(True)
        self.Inline.textChanged.connect(self.disableRun)

    def disableRun(self):

        self.Run.setDisabled(True)

        for ele in self.Inline.text():
            if ele != ' ':
                self.Run.setDisabled(False)

    def run(self):

        self.Inf.setText('Please waiting........')
        time.sleep(0.5)
        score = analyze(self.Inline.text())
        self.Outline.display(score)
        self.Inf.setText('Please type in something')
Exemplo n.º 9
0
class Channel3(QWidget):
    def __init__(self, parent, name, x, y, value):
        super(Channel3, self).__init__(parent)

        self.label = QLabel(name, self)
        self.label.resize(CHANNEL_WIDTH, 20)
        self.label.move(x, y)

        self.gauge = QLCDNumber(self)
        self.gauge.display(value)
        self.gauge.move(x, y + 20)
        self.gauge.resize(CHANNEL_WIDTH, CHANNEL_HEIGHT)
        self.gauge.setFrameShape(QFrame.NoFrame)
        self.gauge.setSegmentStyle(QLCDNumber.Flat)

    @pyqtSlot(float)
    def channel_update(self, value):
        self.gauge.display(value)
        self.value = value
        self.update()
Exemplo n.º 10
0
    def __init__(self):
        super().__init__()
        self.setAcceptDrops(True)
        self.game = Game(4)  # Make game with 4 players

        self.sig = Signals()
        endTurnButton = QPushButton("&EndTurn", self)
        endTurnButton.clicked.connect(self.endTurn)
        endTurnButton.move(1260, 720)
        turnLcd = QLCDNumber(3, self)
        turnLcd.move(90, 715)
        turnLcd.setSegmentStyle(QLCDNumber.Filled)
        turnLcd.resize(60, 40)
        turnTxt = QLabel("Turn:", self)
        turnFont = QFont()
        turnFont.setPointSize(20)
        turnTxt.setFont(turnFont)
        turnTxt.move(20, 720)

        self.sig.turnChanged.connect(turnLcd.display)
        self.sig.turnChanged.emit(self.game.turn)

        quitB = QPushButton("&Quit", self)
        quitB.clicked.connect(self.quit)
        quitB.move(1150, 720)

        self.showPlayerInfo()

        self.coords = []
        self.setWindowTitle("Territory War")
        n = self.game.map.dim
        self.makeMap(1100 // n, 600 // n, n)
        self.setWindowState(Qt.WindowFullScreen)
        self.setFixedSize(self.size())

        self.showArmies()
        self.addDiplomacyLabels()

        thread = threading.Thread(target=self.game.start, args=(0, ))
        thread.start()
Exemplo n.º 11
0
class MainWindow(Ui_MainWindow, QMainWindow):
    """
    主界面二次设计
    """
    def __init__(self):
        super(MainWindow, self).__init__()

        # 获取桌面尺寸
        desktop = QApplication.desktop()
        desk_width = desktop.screenGeometry().width()
        desk_height = desktop.screenGeometry().height()

        # 摄像头图像设置
        self.frame = DIYLabel(self)
        self.frame.setGeometry(0, 0, desk_width, desk_height)

        self.setupUi(self)

        # 按钮定位
        self.buttons = [
            self.att_rec, self.face_login, self.face_rec, self.face_reg
        ]
        map(
            lambda x: x.move(
                desk_width * 0.80, desk_height * 0.33 + self.buttons.index(x) *
                (x.height() + 8)), self.buttons)
        map(lambda x: x.raise_(), self.buttons)

        # 设置时钟
        self.clock = QLCDNumber(self)
        self.clock.setDigitCount(10)
        self.clock.setMode(QLCDNumber.Dec)
        self.clock.setSegmentStyle(QLCDNumber.Flat)
        self.clock.display(time.strftime("%X", time.localtime()))
        self.clock.setStyleSheet("QLCDNumber{color:rgba(255,0,0,100);}")
        self.clock.resize(280, 120)
        self.clock.move(50, desk_height - 30 - self.clock.height())

        self.setWindowFlags(Qt.FramelessWindowHint)  # 隐藏窗口
        self.showFullScreen()  # 窗体全屏
class DigitalClock(QMainWindow):

    def __init__(self):
        QMainWindow.__init__(self)
        self.initUI()

    def initUI(self):
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.Time)
        self.timer.start(10)

        self.clock_screen = QLCDNumber(self)
        self.clock_screen.resize(250,100)

        # Added self.lcd.move and moved the clock 30px down to make space for buttons
        self.clock_screen.move(0,30)
        self.clock_screen.display(strftime("%H" + ":" + "%M"))


        self.r1 = QRadioButton("Hide seconds", self)
        self.r1.move(10, 0)
        self.r2 = QRadioButton("Show seconds", self)
        self.r2.move(110, 0)

        self.r1.toggled.connect(self.woSecs)
        self.r2.toggled.connect(self.wSecs)

        # ---------Window settings --------------------------------

        # Expanded window height by 30px

        self.setGeometry(300, 300, 250, 130)
        self.setWindowTitle("Digital Clock")
        self.setWindowIcon(QtGui.QIcon(""))
        self.show()

    # -------- Slots ------------------------------------------

    def Time(self):
        global var
        if var == True:
            self.clock_screen.display(strftime("%H" + ":" + "%M"))
        elif var == False:
            self.clock_screen.display(strftime("%H" + ":" + "%M" + ":" + "%S"))

    def wSecs(self):
        global var
        var = False

        self.resize(375, 130)
        self.clock_screen.resize(375, 100)
        self.clock_screen.setDigitCount(8)

    def woSecs(self):
        global var
        var = True

        self.resize(250, 130)
        self.clock_screen.resize(250, 100)
        self.clock_screen.setDigitCount(5)
Exemplo n.º 13
0
    def initUI(self):
        self.resize(600, 500)
        self.setWindowTitle('filter_sample')
        # 画像を読み込んで、arrayにセット
        self.array = np.array(
            Image.open("sample.jpg").convert("RGBA"), np.float32)
        #print(self.array.dtype)
        # 画像を読み込んで、ラベルに貼り付け
        pixmap = QPixmap("sample.jpg")
        self.lbl = QLabel(self)
        self.lbl.setPixmap(pixmap)
        # フィルタ適用用のボタンを作って、関数にリンク
        btn1 = QPushButton("Nega", self)
        btn1.move(400, 50)
        btn1.clicked.connect(self.button_clicked1)
        btn2 = QPushButton("Brightness", self)
        btn2.move(400, 100)
        btn2.clicked.connect(self.button_clicked2)
        btn3 = QPushButton("Median", self)
        btn3.move(400, 150)
        btn3.clicked.connect(self.button_clicked3)
        btn4 = QPushButton("FFT", self)
        btn4.move(400, 170)
        btn4.clicked.connect(self.button_clicked4)

        # 数字のウィジェットを作成
        lcd = QLCDNumber(self)
        lcd.resize(150, 100)
        lcd.move(400, 200)
        # スライダーウィジェット作成
        self.sld = QSlider(Qt.Horizontal, self)
        self.sld.resize(150, 30)
        self.sld.move(400, 300)

        # スライダーを変更すると、数字も切り替わる
        self.sld.valueChanged.connect(lcd.display)
        self.sld.sliderReleased.connect(self.release_mouse)
Exemplo n.º 14
0
class parameterWidget(QWidget):
    def __init__(self,minimum,maximum):
        super(parameterWidget,self).__init__()
        self.container = QVBoxLayout()
        self.container.addStretch(1)
        self.slider = QSlider(Qt.Horizontal, self)
        self.slider.setMinimum(minimum)
        self.slider.setMaximum(maximum)
        self.slider.setTickInterval(1)
        self.slider.setSingleStep(1)
        self.container.addWidget(self.slider)
        self.lcd = QLCDNumber()
        self.lcd.setFixedHeight(100)
        self.lcd.setFixedWidth(100)
        self.lcd.resize(50, 100)
        self.container.addWidget(self.lcd)
        self.lcd.setDigitCount(8)
        self.slider.valueChanged.connect(self.update_lcd)
        self.container.addStretch(1)
        self.setLayout(self.container)

    @pyqtSlot(int)
    def update_lcd(self,value):
        self.lcd.display(str(value))
Exemplo n.º 15
0
class Temperature_Page(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        self.NowTemperature = QLCDNumber(self)
        self.WantTemperature = QLCDNumber(self)
        self.SettingDial = QDial(self)
        self.lbNow = QLabel("현재 온도", self)
        self.lbWant = QLabel("희망 온도", self)
        self.NowFont = self.lbNow.font()
        self.NowFont.setPointSize(40)
        self.NowFont.setBold(True)

        self.lbNow.resize(300, 50)
        self.lbNow.move(50, 50)
        self.lbNow.setAlignment(Qt.AlignCenter)
        self.lbNow.setFont(self.NowFont)

        self.lbWant.resize(300, 50)
        self.lbWant.move(400, 50)
        self.lbWant.setAlignment(Qt.AlignCenter)
        self.lbWant.setFont(self.NowFont)

        self.NowTemperature.resize(300, 100)
        self.NowTemperature.move(50, 130)

        self.WantTemperature.resize(300, 100)
        self.WantTemperature.move(400, 130)

        self.SettingDial.resize(190, 190)
        self.SettingDial.setRange(-20, 20)
        self.SettingDial.setNotchesVisible(True)
        self.SettingDial.move(460, 250)
        self.NowTemperature.display(sensorValue)

        self.SettingDial.valueChanged.connect(self.WantTemperature.display)
Exemplo n.º 16
0
class Main(QWidget):
    def __init__(self):
        super(Main, self).__init__()
        self.initUI()

    def initUI(self):

        timer = QTimer(self)
        timer.timeout.connect(self.Time)
        timer.start(10)

        self.lcd = QLCDNumber(self)
        self.lcd.resize(250, 100)

        self.lcd.move(0, 30)
        self.lcd.display(strftime('%H' + ':' + '%M'))

        self.r1 = QRadioButton('Hide seconds', self)
        self.r1.move(10, 0)
        self.r2 = QRadioButton('Show seconds', self)
        self.r2.move(110, 0)

        self.r1.toggled.connect(self.woSecs)
        self.r2.toggled.connect(self.wSecs)

        self.setGeometry(300, 300, 250, 130)
        self.setWindowTitle('Clock')
        self.setWindowIcon(QIcon(''))
        self.show()

    def Time(self):
        global var
        if var == True:
            self.lcd.display(strftime('%H' + ':' + '%M'))
        elif var == False:
            self.lcd.display(strftime('%H' + ':' + '%M' + ':' + '%S'))

    def wSecs(self):
        global var
        var = False

        self.resize(375, 130)
        self.lcd.resize(375, 100)
        self.lcd.setDigitCount(8)

    def woSecs(self):
        global var
        var = True
        self.resize(250, 130)
        self.lcd.resize(250, 100)
        self.lcd.setDigitCount(5)
Exemplo n.º 17
0
class StopwatchWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        # Кнопка старта секундомера
        self.btn_start = QPushButton('Старт', self)
        self.btn_start.move(225, 50)
        self.btn_start.resize(50, 50)
        self.btn_start.clicked.connect(self.start)
        # Кнопка паузы
        self.btn_pause = QPushButton('Пауза', self)
        self.btn_pause.move(225, 50)
        self.btn_pause.resize(50, 50)
        self.btn_pause.setVisible(False)
        self.btn_pause.clicked.connect(self.pause)
        # Кнопка для продолжения секундомера
        self.btn_continue = QPushButton('Продолжить', self)
        self.btn_continue.move(200, 50)
        self.btn_continue.resize(100, 50)
        self.btn_continue.setVisible(False)
        self.btn_continue.clicked.connect(self.timer_continue)
        # Кнопка сохранения результата секундомера
        self.btn_split = QPushButton('Split', self)
        self.btn_split.move(150, 50)
        self.btn_split.resize(50, 50)
        self.btn_split.setVisible(False)
        self.btn_split.clicked.connect(self.spliting)
        # Сброс секундомера и его значений
        self.btn_drop = QPushButton('Сброс', self)
        self.btn_drop.move(300, 50)
        self.btn_drop.resize(50, 50)
        self.btn_drop.setVisible(False)
        self.btn_drop.clicked.connect(self.drop)
        # Дисплей для вывода времени
        self.dsp = QLCDNumber(self)
        self.dsp.move(150, 0)
        self.dsp.resize(200, 50)
        self.dsp.setDigitCount(13)
        self.dsp.display('00:00:00.000')
        # Список со значениями секундомера
        self.lst_times = QListWidget(self)
        self.lst_times.move(125, 100)
        self.lst_times.resize(250, 300)
        # Таймер
        self.nTimer = QTimer()
        self.nTimer.timeout.connect(self.repeatTime)

    def initUI(self):
        self.setGeometry(100, 100, 500, 500)
        self.setWindowTitle('Секундомер')

    def start(self):
        # Инициализируем при старте первое значение в списке
        self.num = 1
        # Устанавливаем всё значение времени на ноль
        self.time_in_ms = 0
        self.time_in_s = 0
        self.time_in_m = 0
        self.time_in_h = 0
        # Махинация с показом кнопок
        self.btn_drop.setVisible(True)
        self.btn_split.setVisible(True)
        self.btn_pause.setVisible(True)
        # Запускаем таймер на 1 мс
        self.nTimer.start(1)

    def repeatTime(self):
        # При каждом тике таймера кол-во мс в секундомере увеличивается на 1, остальные значения правильно форматируются
        self.time_in_ms += 1
        if self.time_in_ms == 1000:
            self.time_in_s += 1
            self.time_in_ms = 0
        if self.time_in_s == 60:
            self.time_in_m += 1
            self.time_in_s = 0
        if self.time_in_m == 60:
            self.time_in_h += 1
            self.time_in_m = 0
        # Переводим их в строку
        ms = str(self.time_in_ms)
        s = str(self.time_in_s)
        m = str(self.time_in_m)
        h = str(self.time_in_h)
        # Форматируем значения к виду hh:mm:ss.mss
        if len(s) == 1:
            s = '0' + s
        if len(m) == 1:
            m = '0' + m
        if len(h) == 1:
            h = '0' + h
        if len(ms) == 1:
            ms = '00' + ms
        if len(ms) == 2:
            ms = '0' + ms
        # Сохраняем в едином виде и показываем в дисплее
        self.time = h + ":" + m + ':' + s + '.' + ms
        self.dsp.display(self.time)

    def drop(self):
        # Останавливаем таймер и сбрасываем время на дисплее
        self.nTimer.stop()
        self.dsp.display('00:00:00.000')
        # Махинации с показом кнопок
        self.btn_pause.setVisible(False)
        self.btn_split.setVisible(False)
        self.btn_drop.setVisible(False)
        self.btn_start.setVisible(True)
        self.btn_continue.setVisible(False)
        # Сбрасываем список значений и устанавливаем, что следующее значение будет первым
        self.lst_times.clear()
        self.num = 1

    def pause(self):
        # Сохраняем на чем остановился таймер
        self.inter = self.nTimer.remainingTime()
        self.nTimer.stop()
        # Махинация с показом кнопок
        self.btn_continue.setVisible(True)
        self.btn_pause.setVisible(False)

    def timer_continue(self):
        # Запускаем с того места, на котором остановили
        self.nTimer.start(self.inter)
        # Махинации с покахом кнопок
        self.btn_pause.setVisible(True)
        self.btn_continue.setVisible(False)

    def spliting(self):
        # Сохраняем данное значение времени в списке
        self.lst_times.addItem(str(self.num) + '. ' + self.time)
        # Делаем следующее значение на один больше, чем предыдущее
        self.num += 1
Exemplo n.º 18
0
class Gps(QWidget):
    def __init__(self, parent):

        super(Gps, self).__init__(parent)

        self.arguments = Arg_Class()

        self.latValue = 5.0
        self.longValue = 3.0
        self.rollValue = 0.0
        self.pitchValue = 0.0
        self.gForceValue = 0.0

        self.latLCD = QLCDNumber(self)
        self.latLCD.display(self.latValue)
        self.latLCD.setFrameShape(QFrame.NoFrame)
        self.latLCD.setSegmentStyle(QLCDNumber.Flat)
        self.latLCD.move(0, 30)
        self.latLCD.resize(70, 50)
        self.latLCD.hide()

        self.latLabel = QLabel(self)
        self.latLabel.setText("lat: ")
        self.latLabel.move(0, 20)
        self.latLabel.hide()

        self.longLCD = QLCDNumber(self)
        self.longLCD.display(self.longValue)
        self.longLCD.setFrameShape(QFrame.NoFrame)
        self.longLCD.setSegmentStyle(QLCDNumber.Flat)
        self.longLCD.move(100, 30)
        self.longLCD.resize(70, 50)
        self.longLCD.hide()

        self.longLabel = QLabel(self)
        self.longLabel.setText("long: ")
        self.longLabel.move(100, 20)
        self.longLabel.hide()

        self.rollLCD = QLCDNumber(self)
        self.rollLCD.display(self.rollValue)
        self.rollLCD.setFrameShape(QFrame.NoFrame)
        self.rollLCD.setSegmentStyle(QLCDNumber.Flat)
        self.rollLCD.move(200, 30)
        self.rollLCD.resize(70, 50)
        self.rollLCD.hide()

        self.rollLabel = QLabel(self)
        self.rollLabel.setText("Roll: ")
        self.rollLabel.move(200, 20)
        self.rollLabel.hide()

        self.pitchLCD = QLCDNumber(self)
        self.pitchLCD.display(self.pitchValue)
        self.pitchLCD.setFrameShape(QFrame.NoFrame)
        self.pitchLCD.setSegmentStyle(QLCDNumber.Flat)
        self.pitchLCD.move(300, 30)
        self.pitchLCD.resize(70, 50)
        self.pitchLCD.hide()

        self.pitchLabel = QLabel(self)
        self.pitchLabel.setText("Pitch: ")
        self.pitchLabel.move(300, 20)
        self.pitchLabel.hide()

        self.gForceLCD = QLCDNumber(self)
        self.gForceLCD.display(self.gForceValue)
        self.gForceLCD.setFrameShape(QFrame.NoFrame)
        self.gForceLCD.setSegmentStyle(QLCDNumber.Flat)
        self.gForceLCD.move(0, 100)
        self.gForceLCD.resize(70, 50)
        self.gForceLCD.hide()

        self.gForceLabel = QLabel(self)
        self.gForceLabel.setText("gForce: ")
        self.gForceLabel.move(0, 100)
        self.gForceLabel.hide()

        self.latLCD.show()
        self.latLabel.show()
        self.longLCD.show()
        self.longLabel.show()
        self.rollLCD.show()
        self.rollLabel.show()
        self.pitchLCD.show()
        self.pitchLabel.show()
        self.gForceLCD.show()
        self.gForceLabel.show()

    @pyqtSlot(float)
    def lat_update(self, value):
        self.latLCD.display(value)
        self.latValue = value
        self.update()

    @pyqtSlot(float)
    def long_update(self, value):
        self.longLCD.display(value)
        self.longValue = value
        self.update()

    @pyqtSlot(float)
    def roll_update(self, value):
        self.rollLCD.display(value)
        self.rollValue = value
        self.update()

    @pyqtSlot(float)
    def pitch_update(self, value):
        self.pitchLCD.display(value)
        self.pitchValue = value
        self.update()

    @pyqtSlot(float)
    def gForce_update(self, value):
        self.gForceLCD.display(value)
        self.gForceValue = value
        self.update()

    def paintEvent(self, event):
        qp = QPainter(self)
        qp.setPen(Qt.white)
Exemplo n.º 19
0
class CWind(QMainWindow):
    """
    主窗口
    """
    def __init__(self):
        super().__init__()
        self._initUI()
        self.my_init_timer()

        self.socket = QTcpSocket()
        self.nextBlockSize = 0
        self.request = None

        self.socket.connected.connect(self.my_sendRequest)
        self.socket.readyRead.connect(self.my_readResponse)
        self.socket.disconnected.connect(self.my_serverHasStopped)
        self.socket.error.connect(self.my_serverHasError)

        # 若已有交易环境配置文件,则打开并读到self.config变量中
        self.config = ()
        if os.path.isfile('setting.cfg') == True:
            self.config = self.my_read_config()
            self.my_update_atr()

        # 状态栏显示启动信息,并存入日志文件
        rec_text = my_cur_time() + ' 开启交易助手!'
        self.statusBar().showMessage(rec_text)
        my_operating_record(rec_text)

    def _initUI(self):
        self.setFixedSize(300, 400)
        self.setWindowFlags(Qt.WindowStaysOnTopHint)
        self.my_center()
        self.setWindowTitle('交易助手')
        self.setWindowIcon(QIcon('myIcon.ico'))
        QToolTip.setFont(QFont('微软雅黑', 10))

        # 以下设置菜单
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('设置')

        self.settingAct = QAction(QIcon('setting.png'), '设置交易环境', self)
        self.settingAct.setShortcut('Ctrl+P')

        aboutAct = QAction(QIcon('contact.png'), '联系我们', self)
        aboutAct.setShortcut('Ctrl+A')
        aboutAct.triggered.connect(self._about)

        exitAct = QAction(QIcon('exit.png'), '退出', self)
        exitAct.setShortcut('Ctrl+Q')
        exitAct.triggered.connect(qApp.quit)

        fileMenu.addAction(self.settingAct)
        fileMenu.addAction(aboutAct)
        fileMenu.addAction(exitAct)

        # LCD时钟
        self.lcd = QLCDNumber(self)
        self.lcd.setDigitCount(5)
        self.lcd.setMode(QLCDNumber.Dec)
        self.lcd.setSegmentStyle(QLCDNumber.Flat)
        self.lcd.display(time.strftime("%X", time.localtime()))
        self.lcd.resize(200, 66)
        self.lcd.move(50, 170)

        # 以下布局窗口各个控件

        self.lab0 = QLabel('', self)
        font0 = QFont()
        font0.setFamily("微软雅黑")
        font0.setPointSize(9)
        font0.setBold(True)
        self.lab0.setFont(font0)
        self.lab0.setStyleSheet('color: rgb(0, 0, 127)')
        self.lab0.resize(288, 20)
        self.lab0.move(5, 36)

        symbols = ['EURUSD', 'GBPUSD', 'XAUUSD', 'USDJPY']

        lab1 = QLabel('交易品种 (1)', self)
        lab1.move(20, 77)

        self.combo1 = QComboBox(self)
        for symbol in symbols:
            self.combo1.addItem(symbol)
        self.combo1.move(20, 112)
        font12 = QFont()
        font12.setBold(True)
        self.combo1.setFont(font12)

        self.cb_buy1 = QCheckBox('做多', self)
        self.cb_buy1.move(140, 80)
        self.cb_buy1.toggle()
        self.cb_buy1.setChecked(False)

        self.cb_sell1 = QCheckBox('做空', self)
        self.cb_sell1.move(140, 115)
        self.cb_sell1.toggle()
        self.cb_sell1.setChecked(False)

        self.btn_open1 = QPushButton('挂单/直开', self)
        self.btn_open1.setToolTip('挂单或者当前市价开仓')
        self.btn_open1.resize(85, 25)
        self.btn_open1.move(200, 70)
        self.btn_open1.clicked.connect(self.my_btn_open1_Clicked)

        self.btn_close1 = QPushButton('撤单/平仓', self)
        self.btn_close1.setToolTip('撤销挂单或平掉已有仓位')
        self.btn_close1.resize(85, 25)
        self.btn_close1.move(200, 100)
        self.btn_close1.clicked.connect(self.my_btn_close1_Clicked)

        self.btn_ProtectiveStop1 = QPushButton('成本价离场', self)
        self.btn_ProtectiveStop1.setToolTip('将止损移到成本价')
        self.btn_ProtectiveStop1.resize(85, 25)
        self.btn_ProtectiveStop1.move(200, 130)
        self.btn_ProtectiveStop1.clicked.connect(
            self.my_btn_ProtectiveStop1_Clicked)

        lab2 = QLabel('交易品种 (2)', self)
        lab2.move(20, 257)

        self.combo2 = QComboBox(self)
        for symbol in symbols:
            self.combo2.addItem(symbol)
        self.combo2.setCurrentText(symbols[1])
        self.combo2.move(20, 292)
        self.combo2.setFont(font12)

        self.cb_buy2 = QCheckBox('做多', self)
        self.cb_buy2.move(140, 260)
        self.cb_buy2.toggle()
        self.cb_buy2.setChecked(False)

        self.cb_sell2 = QCheckBox('做空', self)
        self.cb_sell2.move(140, 295)
        self.cb_sell2.toggle()
        self.cb_sell2.setChecked(False)

        self.btn_open2 = QPushButton('挂单/直开', self)
        self.btn_open2.setToolTip('挂单或者当前市价开仓')
        self.btn_open2.resize(85, 25)
        self.btn_open2.move(200, 250)
        self.btn_open2.clicked.connect(self.my_btn_open2_Clicked)

        self.btn_close2 = QPushButton('撤单/平仓', self)
        self.btn_close2.setToolTip('撤销挂单或平掉已有仓位')
        self.btn_close2.resize(85, 25)
        self.btn_close2.move(200, 280)
        self.btn_close2.clicked.connect(self.my_btn_close2_Clicked)

        self.btn_ProtectiveStop2 = QPushButton('成本价离场', self)
        self.btn_ProtectiveStop2.setToolTip('将止损移到成本价')
        self.btn_ProtectiveStop2.resize(85, 25)
        self.btn_ProtectiveStop2.move(200, 310)
        self.btn_ProtectiveStop2.clicked.connect(
            self.my_btn_ProtectiveStop2_Clicked)

        lbl3 = QLabel('单笔止损:%', self)
        lbl3.move(20, 345)
        self.rb11 = QRadioButton('0.5', self)
        self.rb11.move(115, 345)
        self.rb11.setChecked(True)
        self.rb12 = QRadioButton('1.0', self)
        self.rb12.move(175, 345)
        self.rb13 = QRadioButton('2.0', self)
        self.rb13.move(235, 345)

        self.show()

    def closeEvent(self, event):
        reply = QMessageBox.question(self, '操作提示!', '您确定要关闭“交易助手”?',
                                     QMessageBox.Yes | QMessageBox.No,
                                     QMessageBox.No)
        if reply == QMessageBox.Yes:
            self.socket.close()
            rec_text = my_cur_time() + ' 关闭交易助手!'
            my_operating_record(rec_text)
            event.accept()
        else:
            event.ignore()

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Escape:
            self.showMinimized()

    def my_center(self):
        screen = QDesktopWidget().screenGeometry()
        size = self.geometry()
        self.move((screen.width() - size.width()) / 2 + 132,
                  (screen.height() - size.height() - 90))

    def my_init_timer(self):
        """
        定时器
        """
        self.timer = QTimer()
        self.timer.setInterval(500)
        self.timer.start()
        self.timer.timeout.connect(self.my_update_timer)

    def my_update_timer(self):
        # 定时刷新LCD时钟
        # self.lcd.display(time.strftime("%X", time.localtime()))
        # 定时刷新各品种的ATR
        self.my_update_atr()

    def my_update_atr(self):
        """
        读取ATR文件并更新标签文本
        """
        if len(self.config) == 0:
            self.config = self.my_read_config()
        mode = self.config[1]
        # 从配置文件里找到看盘MT4的Files文件夹
        if mode == 'Local':
            atr_file_path = self.config[3]
        elif mode == 'Network':
            atr_file_path = self.config[4]

        # ATR文件存放在看盘MT4的Files文件夹里
        file_name = atr_file_path + '\\' + 'myatr.txt'
        if os.path.isfile(file_name):
            try:
                with open(file_name, 'r') as file_object:
                    atr = file_object.read()
                # 刷新各品种的ATR
                self.lab0.setText(atr[:38])
                # 刷新LCD时钟(交易服务器时间)
                self.lcd.display(atr[43:48])
            except:
                pass
        else:
            self.lab0.setText('请打开MT4看盘软件并加载ATR_EA程序')

    def _about(self):
        """
        关于菜单
        """
        QMessageBox.information(self, '联系我们——瑞讯银行智能化交易系统',
                                self.tr('微信:zyhj518,手机:13770675275。'))

    def my_btn_open1_Clicked(self):
        """
        挂单或直接市价开仓操作
        """
        if self.cb_buy1.isChecked() or self.cb_sell1.isChecked():
            signal_text = self.combo1.currentText()
            if self.cb_buy1.isChecked():
                signal_text += 'BUY'
            if self.cb_sell1.isChecked():
                signal_text += 'SELL'
            if self.rb12.isChecked():
                signal_text += '1'
            elif self.rb13.isChecked():
                signal_text += '2'

            self.my_send_signal(signal_text)
        else:
            QMessageBox.information(self, '错误提示!', self.tr('请勾选交易方向后,再开仓!'))

    def my_btn_close1_Clicked(self):
        """
        撤销挂单,或平掉已有仓位
        """
        signal_text = self.combo1.currentText() + 'CLOSE'

        self.my_send_signal(signal_text)

    def my_btn_ProtectiveStop1_Clicked(self):
        """
        保护性止损
        """
        signal_text = self.combo1.currentText() + 'ProtectiveStop'

        self.my_send_signal(signal_text)

    def my_btn_open2_Clicked(self):
        """
        挂单或直接市价开仓操作
        """
        if self.cb_buy2.isChecked() or self.cb_sell2.isChecked():
            signal_text = self.combo2.currentText()
            if self.cb_buy2.isChecked():
                signal_text += 'BUY'
            if self.cb_sell2.isChecked():
                signal_text += 'SELL'
            if self.rb12.isChecked():
                signal_text += '1'
            elif self.rb13.isChecked():
                signal_text += '2'

            self.my_send_signal(signal_text)
        else:
            QMessageBox.critical(self, '错误提示!', self.tr('请勾选交易方向后,再开仓!'))

    def my_btn_close2_Clicked(self):
        """
        撤销挂单,或平掉已有仓位
        """
        signal_text = self.combo2.currentText() + 'CLOSE'

        self.my_send_signal(signal_text)

    def my_btn_ProtectiveStop2_Clicked(self):
        """
        保护性止损
        """
        signal_text = self.combo2.currentText() + 'ProtectiveStop'

        self.my_send_signal(signal_text)

    def my_updateUI(self):
        if self.request is not None:
            enabled = False
        else:
            enabled = True

        self.btn_open1.setEnabled(enabled)
        self.btn_close1.setEnabled(enabled)
        self.btn_ProtectiveStop1.setEnabled(enabled)
        self.btn_open2.setEnabled(enabled)
        self.btn_close2.setEnabled(enabled)
        self.btn_ProtectiveStop2.setEnabled(enabled)

    def my_read_config(self):
        """
        读取交易环境的配置文件,返回MT4账户和IP地址或文件夹
        """
        config = configparser.ConfigParser()
        config.read('setting.cfg')

        account_number = config.get('MT4', 'account_number')
        mode = config.get('Pathway', 'mode')
        atr = config.get('ATR', 'directory')

        if config.get('Pathway', 'mode') == 'Local':
            directory = config.get('Local', 'directory')
            return account_number, mode, directory, atr

        elif config.get('Pathway', 'mode') == 'Network':
            host = config.get('Network', 'host')
            port = config.get('Network', 'port')
            return account_number, mode, host, port, atr

    def my_send_signal(self, inp_text):
        """
        发送交易指令到MT4的Files文件夹,或发送到交易服务器
        """
        # 读取配置文件到字典变量
        if len(self.config) == 0:
            self.config = self.my_read_config()
        mode = self.config[1]

        if mode == 'Local':
            symbols = ['EURUSD', 'GBPUSD', 'XAUUSD', 'USDJPY']
            for symbol in symbols:
                if inp_text.find(symbol) >= 0:
                    trade_symbol = symbol
            file_path = self.config[2]
            # 检查交易品种的子文件夹是否存在,不存在就新建相应的子文件夹
            if os.path.exists(file_path + '\\' + trade_symbol) == False:
                os.mkdir(file_path + '\\' + trade_symbol)

            file_path = file_path + '\\' + trade_symbol + '\\'

            # 将指令存到对应的子文件夹里
            file_name = file_path + 'trade_signal.txt'

            with open(file_name, 'w') as file_object:
                file_object.write(inp_text)

        # 将交易指令传到交易服务器上
        elif mode == 'Network':
            account_number = self.config[0]
            host = self.config[2]
            port = int(self.config[3])

            self.request = QByteArray()
            stream = QDataStream(self.request, QIODevice.WriteOnly)
            stream.writeUInt16(0)
            stream.writeQString(account_number)
            stream.writeQString(inp_text)
            stream.device().seek(0)
            stream.writeUInt16(self.request.size() - SIZEOF_UINT16)

            self.my_updateUI()

            if self.socket.isOpen():
                self.socket.close()
            self.socket.connectToHost(host, port)

            rec_text = my_cur_time() + ' 正在连接远程交易服务器...'
            self.statusBar().showMessage(rec_text)
            my_operating_record(rec_text)

    def my_sendRequest(self):
        self.nextBlockSize = 0
        self.socket.write(self.request)
        self.request = None

        rec_text = my_cur_time() + ' 正在发送您的交易指令...'
        self.statusBar().showMessage(rec_text)
        my_operating_record(rec_text)

    def my_readResponse(self):
        stream = QDataStream(self.socket)

        while True:
            if self.nextBlockSize == 0:
                if self.socket.bytesAvailable() < SIZEOF_UINT16:
                    break
                self.nextBlockSize = stream.readUInt16()
            if self.socket.bytesAvailable() < self.nextBlockSize:
                break

            ser_reply = stream.readQString()

            if ser_reply == 'None':
                QMessageBox.critical(self, '错误提示!', self.tr('您没有开通服务器交易功能!'))
                rec_text = my_cur_time() + ' 您没有开通服务器交易功能!'
                self.statusBar().showMessage(rec_text)
                my_operating_record(rec_text)
            else:
                rec_text = my_cur_time() + ' 服务器已接收指令:{0}'.format(ser_reply)
                self.statusBar().showMessage(rec_text)
                my_operating_record(rec_text)

            self.nextBlockSize = 0
            self.socket.close()
            self.my_updateUI()
            rec_text = my_cur_time() + ' 已断开服务器连接!'
            my_operating_record(rec_text)

    def my_serverHasStopped(self):
        self.socket.close()

    def my_serverHasError(self, error):
        self.socket.close()

        rec_text = my_cur_time() + ' 错误:{0}'.format(self.socket.errorString())
        self.statusBar().showMessage(rec_text)
        my_operating_record(rec_text)
Exemplo n.º 20
0
class Example(QMainWindow):
    def __init__(self):
        super(Example, self).__init__()
        self.tmr = QTimer()
        self.tmr.timeout.connect(self.on_timer)
        self.alarm_class = Alarm(0, 0)
        self.status = False
        self.h_m_list = [None, None]
        self.color_frame = (0, 0, 0)
        self.old_pos = None
        self.text = ['00', '00']
        self.initUI()

    def initUI(self):
        # Генерация окна
        self.setWindowTitle('Clock')
        self.setGeometry(100, 100, 260, 160)
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setObjectName('MainWidget')
        self.setStyleSheet("#MainWidget {background-color: #272727;}")

        # Кнопка закрытие окна
        self.btn_close = QPushButton(self, clicked=self.close)
        self.btn_close.setIcon(QtGui.QIcon(QtGui.QPixmap('pngs/cross.png')))
        self.btn_close.setFlat(True)
        self.btn_close.resize(17, 17)
        self.btn_close.move(242, 1)
        self.btn_close.show()

        # Кнопка возрата в general
        self.btn_gn = QPushButton(self, clicked=self.general)
        self.btn_gn.setIcon(QtGui.QIcon(QtGui.QPixmap('pngs/back.png')))
        self.btn_gn.setFlat(True)
        self.btn_gn.resize(20, 20)
        self.btn_gn.move(1, 1)
        self.btn_gn.show()

        # Кнопка входа в settings
        self.btn_st = QPushButton(self, clicked=self.settings)
        self.btn_st.setIcon(QtGui.QIcon(QtGui.QPixmap("pngs/gear.png")))
        self.btn_st.setFlat(True)
        self.btn_st.resize(15, 15)
        self.btn_st.move(3, 3)
        self.btn_st.show()

        # Кнопка будильника
        self.alarmB = QPushButton(self, clicked=self.alarm_st)
        self.alarmB.setIcon(QtGui.QIcon(QtGui.QPixmap("pngs/alarmN.png")))
        self.alarmB.setFlat(True)
        self.alarmB.resize(25, 25)
        self.alarmB.move(204, 39)
        self.alarmB.show()

        # Кнопка включения будильника
        self.alVKL = QPushButton('Включить', self, clicked=self.alarm_status)
        self.alVKL.resize(65, 20)
        self.alVKL.setObjectName('a')
        self.alVKL.setStyleSheet(
            "#a {background-color: white; border-radius: 2px;}")
        self.alVKL.move(98, 110)

        # Синхронизация системного времени
        self.sinT = QPushButton('Синхронизация\nсистемного\nвремени',
                                self,
                                clicked=set_server_time)
        self.sinT.resize(90, 50)
        self.sinT.move(120, 28)

        # Дисплей для будильника
        self.lcdA = QLCDNumber(self)
        self.lcdA.resize(150, 75)
        self.lcdA.move(55, 30)
        self.lcdA.setSegmentStyle(QLCDNumber.Flat)
        self.lcdA.setObjectName("LCDA")
        self.lcdA.setStyleSheet(
            "#LCDA {background-image: url(pngs/фон.png); border: 2px solid #4c4c4c;}"
        )
        self.lcdA.display(':'.join(self.text))

        # Слайдер выбора часа
        self.sldH = QSlider(Qt.Vertical, self)
        self.sldH.setMaximum(23)
        self.sldH.move(46, 30)
        self.sldH.resize(9, 75)
        self.sldH.valueChanged.connect(self.slider)

        # Слайдер выбора минут
        self.sldM = QSlider(Qt.Vertical, self)
        self.sldM.setMaximum(59)
        self.sldM.move(206, 30)
        self.sldM.resize(9, 75)
        self.sldM.valueChanged.connect(self.slider2)

        # Дисплей часов
        self.lcd = QLCDNumber(self)
        self.lcd.resize(150, 75)
        self.lcd.setSegmentStyle(QLCDNumber.Flat)
        self.lcd.move(55, 40)
        self.lcd.display(make_time_for_lcd())
        self.lcd.setObjectName("LCD")
        self.lcd.setStyleSheet(
            "#LCD {background-image: url(pngs/фон.png); border: 2px solid #4c4c4c;}"
        )

        # Комбобокс для стилизации
        self.combo = QComboBox(self)
        self.combo.setStyleSheet('border-radius: 3px, 3px, 2px, 1px;')
        self.combo.resize(75, 20)
        self.combo.addItems([
            "Stylization", "Color", "Olds", "Matrix", "Sofa", "Low Poly",
            "Anime", "Pony", "Савок"
        ])
        self.combo.activated[str].connect(self.onActivated)
        self.combo.move(30, 30)

        # Кнопка отключения будильника
        self.gm = QPushButton('ОТКЛЮЧИТЬ\nБУДИЛЬНИК',
                              self,
                              clicked=self.play_stop)
        self.gm.setObjectName('x')
        self.gm.setStyleSheet("#x {background-color: rgb(0, 255, 0);}")
        self.gm.resize(90, 50)
        self.gm.move(85, 55)

        self.general()

    # Сцена часов
    def general(self):
        try:
            self.btn_st.show()
            self.btn_gn.hide()
            self.combo.hide()
            self.alarmB.show()
            self.lcd.show()
            self.sldH.hide()
            self.sldM.hide()
            self.lcdA.hide()
            self.alVKL.hide()
            self.sinT.hide()
            self.gm.hide()
        except AttributeError:
            pass

    # Сцена настроек
    def settings(self):
        self.btn_gn.show()
        self.btn_st.hide()
        self.combo.show()
        self.alarmB.hide()
        self.lcd.hide()
        self.sldH.hide()
        self.sldM.hide()
        self.lcdA.hide()
        self.alVKL.hide()
        self.sinT.show()
        self.gm.hide()

    def alarm_st(self):
        self.btn_gn.show()
        self.btn_st.hide()
        self.alarmB.hide()
        self.lcd.hide()
        self.sldH.show()
        self.sldM.show()
        self.sldH.setValue(get_local_time()['hours'])
        self.sldM.setValue(get_local_time()['minutes'])
        self.lcdA.show()
        self.alVKL.show()
        self.sinT.hide()

    def good_morning(self):
        self.gm.show()
        self.btn_gn.hide()
        self.btn_st.hide()
        self.alarmB.hide()
        self.lcd.hide()
        self.sldH.hide()
        self.sldM.hide()
        self.lcdA.hide()
        self.alVKL.hide()
        self.sinT.hide()

    def play_stop(self):
        self.alarm_class.stop_sound()
        self.alarm_status()
        self.general()

    # Изменение фона окна
    def palette(self):
        color = QColorDialog.getColor()
        if color.isValid():
            self.setStyleSheet("#MainWidget {background-color: %s;}" %
                               color.name())
            self.paintEvent(self, clr=self.hex_to_rgb(color.name()))

    # рисование окна
    def paintEvent(self, event: QtGui.QPaintEvent, clr=(0, 0, 0)):
        painter = QtGui.QPainter(self)
        painter.setPen(
            QtGui.QPen(
                QtGui.QColor(int(fabs(clr[0] - 75)), int(fabs(clr[1] - 75)),
                             int(fabs(clr[2] - 75))), 2))
        painter.drawRect(self.rect())

    # нужна для перемещёния окна
    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.old_pos = event.pos()

    # вызывается всякий раз, когда мышь перемещается
    def mouseMoveEvent(self, event):
        if not self.old_pos:
            return
        delta = event.pos() - self.old_pos
        self.move(self.pos() + delta)

    # перевод их hex в rgb
    def hex_to_rgb(self, value):
        value = value.lstrip('#')
        lv = len(value)
        return tuple(
            int(value[i:i + lv // 3], 16) for i in range(0, lv, lv // 3))

    def onActivated(self, val):
        backgrounds = {
            'Stylization': '#272727',
            'Olds': 'pngs/olds.png',
            'Matrix': 'pngs/matrix.png',
            'Sofa': 'pngs/диван.jpg',
            'Low Poly': 'pngs/bg.png',
            "Anime": 'pngs/anime.jpg',
            "Pony": 'pngs/pony.jpg',
            "Савок": 'pngs/фоник.png'
        }
        if val == 'Color':
            self.palette()
        elif val == 'Stylization':
            self.setStyleSheet("#MainWidget {background-color: #272727;}")
        elif val != 'Color':
            self.setStyleSheet("#MainWidget {background-image: url(%s);}" %
                               backgrounds[val])
            self.paintEvent(self)

    def slider(self, n):
        self.h_m_list[0] = n
        if len(str(n)) == 1:
            n = '0' + str(n)
        self.text[0] = str(n)
        self.lcdA.display(':'.join(self.text))

    def slider2(self, n):
        self.h_m_list[1] = n
        if len(str(n)) == 1:
            n = '0' + str(n)
        self.text[1] = str(n)
        self.lcdA.display(':'.join(self.text))

    def on_timer(self):
        """ timer handler """
        self.lcd.display(make_time_for_lcd())
        if self.status:
            t = get_local_time()
            if t['hours'] == self.h_m_list[0] and t[
                    'minutes'] == self.h_m_list[1]:
                self.alarm_class.start_sound()
                self.good_morning()

    def alarm_status(self):
        if not self.status:
            self.status = True
            self.alarmB.setIcon(QtGui.QIcon(QtGui.QPixmap("pngs/alarmA.png")))
            self.alVKL.setText('Выключить')
            self.alarm_class.set(self.h_m_list[0], self.h_m_list[1])
        elif self.status:
            self.status = False
            self.alarmB.setIcon(QtGui.QIcon(QtGui.QPixmap("pngs/alarmN.png")))
            self.alVKL.setText('Включить')
        self.alarm_class.tracked = self.status
Exemplo n.º 21
0
class Error(QWidget):
    def __init__(self, parent):

        super(Error, self).__init__(parent)

        self.arguments = Arg_Class()

        self.rpmCutValue = 0
        self.rpmCutValuePrev = 0
        self.cutFlag = 0

        self.DCLValue = 0
        self.errorCodePL = 0  # post low
        self.errorCodePH = 0  # post high
        self.errorCodeRL = 0  # run low
        self.errorCodeRH = 0  # run high

        self.DCLGauge = QLCDNumber(self)
        self.DCLGauge.display(str(self.DCLValue).zfill(1))
        self.DCLGauge.move(200, 0)
        self.DCLGauge.resize(80, 80)
        self.DCLGauge.setFrameShape(QFrame.NoFrame)
        self.DCLGauge.setSegmentStyle(QLCDNumber.Flat)

        self.DCLlabel = QLabel(self)
        self.DCLlabel.setText("DCL: ")
        self.DCLlabel.move(200, 0)

        self.PLErrorGauge = QLCDNumber(self)
        self.PLErrorGauge.display(str(self.errorCodePL).zfill(1))
        self.PLErrorGauge.move(0, 0)
        self.PLErrorGauge.resize(80, 80)
        self.PLErrorGauge.setFrameShape(QFrame.NoFrame)
        self.PLErrorGauge.setSegmentStyle(QLCDNumber.Flat)

        self.PHErrorGauge = QLCDNumber(self)
        self.PHErrorGauge.display(str(self.errorCodePH).zfill(1))
        self.PHErrorGauge.move(20, 0)
        self.PHErrorGauge.resize(80, 80)
        self.PHErrorGauge.setFrameShape(QFrame.NoFrame)
        self.PHErrorGauge.setSegmentStyle(QLCDNumber.Flat)

        self.RLErrorGauge = QLCDNumber(self)
        self.RLErrorGauge.display(str(self.errorCodeRL).zfill(1))
        self.RLErrorGauge.move(40, 0)
        self.RLErrorGauge.resize(80, 80)
        self.RLErrorGauge.setFrameShape(QFrame.NoFrame)
        self.RLErrorGauge.setSegmentStyle(QLCDNumber.Flat)

        self.RHErrorGauge = QLCDNumber(self)
        self.RHErrorGauge.display(str(self.errorCodeRH).zfill(1))
        self.RHErrorGauge.move(60, 0)
        self.RHErrorGauge.resize(80, 80)
        self.RHErrorGauge.setFrameShape(QFrame.NoFrame)
        self.RHErrorGauge.setSegmentStyle(QLCDNumber.Flat)

        self.errorlabel = QLabel(self)
        self.errorlabel.setText("Error code: ")
        self.errorlabel.move(0, 0)

        self.rpmCutGauge = QLCDNumber(self)
        self.rpmCutGauge.display(str(self.DCLValue).zfill(1))
        self.rpmCutGauge.move(300, 0)
        self.rpmCutGauge.resize(100, 100)
        self.rpmCutGauge.setFrameShape(QFrame.NoFrame)
        self.rpmCutGauge.setSegmentStyle(QLCDNumber.Flat)
        self.rpmCutGauge.hide()

        self.rpmCutLabel = QLabel(self)
        self.rpmCutLabel.setText("RPM Before Cut: ")
        self.rpmCutLabel.move(300, 0)
        self.rpmCutLabel.hide()

    @pyqtSlot(float)
    def DCL_update(self, value):
        self.DCLGauge.display(value)

    @pyqtSlot(float)
    def RPMCut_update(self, value):
        rpmCutValue = value
        if value > 10 and self.cutFlag == 0:
            self.rpmCutGauge.hide()
            #self.rpmCutGauge.display(value)
            self.rpmCutValuePrev = value
        else:
            self.rpmCutGauge.display(self.rpmCutValuePrev)
            self.rpmCutGauge.show()
            self.rpmCutLabel.show()
            self.cutFlag = 1

    @pyqtSlot(int, int, int, int)
    def error_update(self, value1, value2, value3, value4):
        self.PLErrorGauge.display(value1)
        self.PHErrorGauge.display(value2)
        self.RLErrorGauge.display(value3)
        self.RHErrorGauge.display(value4)
class Graphics(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        
    def initUI(self):
        self.setWindowTitle("ComparadE")
        self.setGeometry(0, 30, 700, 250)
        
        self.qual_out = QLCDNumber(self)
        self.qual_out.move(350, 10)
        self.qual_out.resize(300, 100)
        
        self.style1_print = QLabel(self)
        self.style1_print.resize(300, 30)
        
        self.style2_print = QLabel(self)
        self.style2_print.resize(300, 30)
        
        self.setWindowIcon(QIcon('maxresdefault.jpg'))
        
        self.show()   
        
    def output(self):  
        self.realS1 = False
        self.realP1 = False
        self.realO1 = False
        
        self.realS2 = False
        self.realP2 = False
        self.realO2 = False
        
        if self.flagP1:
            s = QInputDialog.getText(self, 'Quation','Первый текст публицистический. ЭТО ВЕРНО?(y/n):') 
            m = s[0]
            if m == 'n':
                s = QInputDialog.getText(self, 'Quation','Тогда какой?(научный/официальный):')
                prime = s[0]
                if prime == 'научный':                
                    self.realS1 = True
                elif prime == 'официальный':
                    self.realO1 = True
            else:
                self.realP1 = self.flagP1
                
        elif self.flagS1:
            s = QInputDialog.getText(self, 'Quation','Первый текст научный. ЭТО ВЕРНО?(y/n):') 
            m = s[0]
            if m == 'n':
                s = QInputDialog.getText(self, 'Quation','Тогда какой?(публицистический/официальный):')
                prime = s[0]
                if prime == 'публицистический':                
                    self.realP1 = True
                elif prime == 'официальный':
                    self.realO1 = True
            else:
                self.realS1 = self.flagS1
                
        elif self.flagO1:
            s = QInputDialog.getText(self, 'Quation','Первый текст официальный. ЭТО ВЕРНО?(y/n):') 
            m = s[0]
            if m == 'n':
                s = QInputDialog.getText(self, 'Quation','Тогда какой?(публицистический/научный):')
                prime = s[0]
                if prime == 'публицистический':                
                    self.realP1 = True
                elif prime == 'научный':
                    self.realS1 = True
            else:
                self.realO1 = self.flagO1
        
        if self.flagP2:
            s = QInputDialog.getText(self, 'Quation','Второй текст публицистический. ЭТО ВЕРНО?(y/n):') 
            m = s[0]
            if m == 'n':
                s = QInputDialog.getText(self, 'Quation','Тогда какой?(научный/официальный):')
                prime = s[0]
                if prime == 'научный':                
                    self.realS2 = True
                elif prime == 'официальный':
                    self.realO2= True
            else:
                self.realP2 = self.flagP2
                
        elif self.flagS2:
            s = QInputDialog.getText(self, 'Quation','Второй текст научный. ЭТО ВЕРНО?(y/n):') 
            m = s[0]
            if m == 'n':
                s = QInputDialog.getText(self, 'Quation','Тогда какой?(публицистический/официальный):')
                prime = s[0]
                if prime == 'публицистический':                
                    self.realP2 = True
                elif prime == 'официальный':
                    self.realO2 = True
            else:
                self.realS2 = self.flagS2
                
        elif self.flagO2:
            s = QInputDialog.getText(self, 'Quation','Второй текст официальный. ЭТО ВЕРНО?(y/n):') 
            m = s[0]
            if m == 'n':
                s = QInputDialog.getText(self, 'Quation','Тогда какой?(публицистический/научный):')
                prime = s[0]
                if prime == 'публицистический':                
                    self.realP2 = True
                elif prime == 'научный':
                    self.realS2 = True
            else:
                self.realO2 = self.flagO2
                
    def Learn(self):
        if self.realS1:
            self.style1_print.setText("Первый текст научный")
            self.style1_print.move(10, 10)
            
        elif self.realP1:
            self.style1_print.setText("Первый текст публицистический")
            self.style1_print.move(10, 10)
            
        elif self.realO1:
            self.style1_print.setText("Первый текст официальный")
            self.style1_print.move(10, 10)
            
            
        if self.realS2:
            self.style2_print.setText("Второй текст научный")
            self.style2_print.move(10, 60)
            
        elif self.realP1:
            self.style2_print.setText("Второй текст публицистический")
            self.style2_print.move(10, 60)
            
        elif self.realO2:
            self.style2_print.setText("Второй текст официальный")
            self.style2_print.move(10, 60)
        
        if self.quality == 98:
            self.qual_out.display(self.quality + 2)  
        else:
            self.qual_out.display(self.quality)
        
        
    def main(self):  
        answer = QInputDialog.getText(self, 'Just question','Вы хотите просто откорректировать словарь?(да/нет):') 
        a = answer[0]

        if a == "да":
            public, scientic, office, extra = style_read()
            style_correct(public, scientic, office, extra)   
            
        elif a == "нет":
            pretexts, signs = read_PreSigns()
            public, scientic, office, extra = style_read()
            
            t1 = QInputDialog.getText(self, 'Input text1','Введите первый текст:                                                                                                                                                         ') 
            t2 = QInputDialog.getText(self, 'Input text2','Введите второй текст:                                                                                                                                                         ') 
            
            text1 = t1[0]
            text2 = t2[0]
            
            self.corrected1, self.corrected2 = forma(pretexts, signs, extra, text1, text2)
            
            self.flagP1, self.flagS1, self.flagO1, self.flagP2, self.flagS2, self.flagO2 = style_initial(self.corrected1, self.corrected2, public, scientic, office, extra)
            
            self.output()
            
            style_form(self.realP1, self.realS1, self.realO1, self.realP2, self.realS2, self.realO2, self.corrected1, self.corrected2)
            
            public, scientic, office, extra = style_read()
            
            style_correct(public, scientic, office, extra)
            self.quality = ComparadE(self.corrected1, self.corrected2, self.realP1, self.realS1, self.realO1, self.realP2, self.realS2, self.realO2)
            
            self.Learn()  
Exemplo n.º 23
0
class Example(QWidget):
    def __init__(self):

        super().__init__()

        self.update_interval = 1000  # 温度、湿度、日時を更新する間隔 [ms]
        self.fontsize = 15  # 上記の情報の文字サイズ

        self.initUI()

    def initUI(self):
        # ウインドウサイズ (x座標, y座標, 横幅, 縦幅)
        self.setGeometry(300, 300, 800, 500)

        ### 基本情報
        # 気温
        self.lbl_temp = QLabel('')
        self.lbl_temp.setFont(QFont('Arial', self.fontsize))
        # 湿度
        self.lbl_humidity = QLabel('')
        self.lbl_humidity.setFont(QFont('Arial', self.fontsize))
        # 日時
        self.lbl_date = QLabel('')
        self.lbl_date.setFont(QFont('Arial', self.fontsize))

        #一秒間隔で基本情報の更新
        self.date_timer = QTimer(self)
        self.date_timer.timeout.connect(self.update_date)
        self.date_timer.timeout.connect(self.update_temp)
        self.date_timer.timeout.connect(self.update_lbl_humidity)
        self.date_timer.start(self.update_interval)

        # 時計
        timer = QTimer(self)
        timer.timeout.connect(self.updtTime)
        self.testTimeDisplay = QLCDNumber(self)
        self.testTimeDisplay.setSegmentStyle(QLCDNumber.Filled)
        self.testTimeDisplay.setDigitCount(8)
        self.testTimeDisplay.resize(200, 200)
        self.updtTime()
        timer.start(1000)

        # 基本情報をまとめる
        info_hbox = QHBoxLayout()
        info_hbox.addWidget(self.lbl_temp)
        info_hbox.addWidget(self.lbl_humidity)
        info_hbox.addStretch(1)
        info_hbox.addWidget(self.lbl_date)
        info_hbox.addWidget(self.testTimeDisplay)

        ### 学習済みモデルを読み込む
        btn_model = QPushButton('File')  # モデルを読み込むボタン
        btn_model.resize(btn_model.sizeHint())  # ボタンのサイズの自動設定
        btn_model.clicked.connect(self.load_model)  # ボタンおされた時の処理
        # 読み込んだモデル名を表示
        self.textbox = QLabel()  # テキストボックス
        # モデル読み込み関係をまとめる
        load_image_hbox = QHBoxLayout()
        load_image_hbox.addWidget(btn_model)
        load_image_hbox.addWidget(self.textbox)
        load_image_hbox.addStretch(1)

        ### 入力画像用
        # 画像名 (画像サイズ)
        self.lbl_input_name = QLabel()
        # 入力画像
        self.img_input = QLabel()
        self.setImage(self.img_input,
                      self.lbl_input_name,
                      image_path1,
                      name="Input Image")  # 画像のセット
        # 入力画像読み込みのボタン
        btn_in = QPushButton('Load Input image')  # ボタンウィジェット作成
        btn_in.resize(btn_in.sizeHint())  # ボタンのサイズの自動設定
        btn_in.clicked.connect(self.load_input_image)  # ボタンが押された時の処理
        # ボタンが伸びないようにする
        btn_input = QHBoxLayout()
        btn_input.addWidget(btn_in)
        btn_input.addStretch(1)
        # 入力画像関連をinputsにまとめる
        inputs_vbox = QVBoxLayout()
        inputs_vbox.addWidget(self.img_input)
        inputs_vbox.addWidget(self.lbl_input_name)
        inputs_vbox.addLayout(btn_input)
        inputs_vbox.addStretch(1)

        ### 推論画像用
        # 画像名
        self.output_name = QLabel()
        # 出力画像用 (入力画像が読み込まれたら仮で入力画像と同じものをセット)
        self.img_output = QLabel(self)
        self.setImage(self.img_output,
                      self.output_name,
                      image_path1,
                      name="Output Image")  # 出力画像をセット (仮)
        # 推論を行う
        self.btn_inference = QPushButton(
            'Inference')  # 推論を行うボタン (モデルの読み込み状態に合わせてボタンを押せなくする)
        self.btn_inference.resize(btn_in.sizeHint())  # ボタンのサイズの自動設定
        self.btn_inference.setEnabled(False)  # 初期状態ではボタンを押せないようにする
        self.btn_inference.clicked.connect(self.Inference)  # ボタンが押された時の処理

        # ボタンが伸びないようにする
        btn_inference_hbox = QHBoxLayout()
        btn_inference_hbox.addWidget(self.btn_inference)
        btn_inference_hbox.addStretch(1)

        # 出力画像関連をまとめる
        outputs_vbox = QVBoxLayout()
        outputs_vbox.addWidget(self.img_output)
        outputs_vbox.addWidget(self.output_name)
        outputs_vbox.addLayout(btn_inference_hbox)
        outputs_vbox.addStretch(1)

        ### 推論画像用
        ### 入出力画像を横並びにする
        images_net = QHBoxLayout()
        images_net.addLayout(inputs_vbox)
        images_net.addLayout(outputs_vbox)

        ### 全体の構造
        main = QVBoxLayout()
        main.addLayout(info_hbox)
        main.addLayout(load_image_hbox)
        main.addLayout(images_net)
        main.addStretch(1)
        self.setLayout(main)
        self.show()

    # 時間の更新
    def updtTime(self):
        currentTime = QDateTime.currentDateTime().toString('hh:mm:ss')
        self.testTimeDisplay.display(currentTime)

    # 日付の更新
    def update_date(self):
        timestamp = str("{:%Y/%m/%d}".format(datetime.datetime.now()))
        self.lbl_date.setText(timestamp)

    # 温度の更新
    def update_temp(self):
        rand = random.random()
        self.lbl_temp.setText("温度 " + str(rand) + "[℃]")

    # 湿度の更新
    def update_lbl_humidity(self):
        rand = random.random()
        self.lbl_humidity.setText("湿度 " + str(rand) + "[%]")

    # クリックのテスト用
    def onClick(self):
        print("click")

    # 画像のセット
    def setImage(self, lbl_fig, lbl_name, image_path, name=""):
        pixmap = QPixmap(image_path)
        # 画像の配置
        lbl_fig.setPixmap(pixmap)
        # テキストの更新
        lbl_name.setText(
            ('%s (%dx%d)' % (name, pixmap.height(), pixmap.width())))

    # モデルを読み込むボタンを押したときの処理
    def load_model(self):
        # 第二引数はダイアログのタイトル、第三引数は表示するパス
        fname = QFileDialog.getOpenFileName(self, 'Open file', '')
        # ファイル名
        name = fname[0].split("/")[-1]
        # テキストを読み込んだファイル名に更新
        self.textbox.setText(name)
        if name.split(".")[-1] == "h5":  # ほかのフォーマットも読み込むなら追加
            # モデルの読み込み
            self.model = tf.keras.models.load_model(fname[0], compile=False)
            # ボタン「"infenrece"」を押せるようにする
            self.btn_inference.setEnabled(True)
            print(name, "Load")
        else:
            self.btn_inference.setEnabled(False)

    # エクスプローラーからモデルを読み込む
    def load_input_image(self):
        # 第二引数はダイアログのタイトル、第三引数は表示するパス
        fname = QFileDialog.getOpenFileName(self, 'Open file', '')
        # 画像のセット
        fig_format = fname[0].split(".")[-1]
        if (fig_format == "jpg") or (fig_format == "png"):  # 他の拡張子も入れるなら追加
            self.setImage(self.img_input,
                          self.lbl_input_name,
                          fname[0],
                          name="Input Image")
            self.setImage(self.img_output,
                          self.lbl_input_name,
                          fname[0],
                          name="Output Image")

    # 更新予定
    def Inference(self):
        print("Hello World.")
        pass
Exemplo n.º 24
0
class GUI(QWidget):
    
    def __init__(self):
        super().__init__()
        self.initUI()
        
    def initUI(self):
        self.radar_image = QtGui.QPixmap(resource_path('img/radar3.png'))
        self.gps_image = QtGui.QPixmap(resource_path('img/gps.png'))
        self.glonass_image = QtGui.QPixmap(resource_path('img/glonass.png'))
        self.bds_image = QtGui.QPixmap(resource_path('img/bds.jpg'))
        
        self.middle = [301,306.5]#[351, 356.5]
        self.radius = 220.5
        self.radar = QLabel(self)
        self.satellites_label = []
        self.satellites = []
        self.radar_show()
        
        self.timer1_init()
        
        self.lcd=QLCDNumber(19, self)
        self.lcd.resize(900,150)
        self.lcd.setSegmentStyle(QLCDNumber.Flat)
        self.lcd.move(290,50)
        self.lcd.setLineWidth(0)
        self.lcd.display('2020-01-01 0:0:01')
        
        self.browser_label = QLabel(self)
        self.browser_label.setText("GNSS报文")
        self.browser_label.move(1215,250)
        self.browser_label.setFont(QtGui.QFont('Timers',18))
        self.text_browser = QTextBrowser(self)
        self.text_browser.resize(350,530)
        self.text_browser.move(1100,300)
        self.text_browser.setStyleSheet("border:3px solid black") 
        self.text_browser.setFont(QtGui.QFont('Timers',8))
        self.textEdit=QTextEdit()
        
        self.tableWidget = QtWidgets.QTableWidget(7,1,self)
        self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        self.tableWidget.setVerticalHeaderLabels(['南/北纬','纬度','东/西经', '经度', '航向', '速率', '定位方式'])
        self.tableWidget.setHorizontalHeaderLabels(['数据'])
        self.tableWidget.setGeometry(QtCore.QRect(750, 420, 250, 290))
        self.tableWidget.setShowGrid(False)
        #self.tableWidget.setFont(QtGui.QFont('Timers',10))
        self.Items = []
        for i in range(7):    
            self.Items.append(QTableWidgetItem('--'))
            self.Items[i].setTextAlignment(Qt.AlignHCenter|Qt.AlignVCenter)
            self.tableWidget.setItem(i,0,self.Items[i])
        #self.tableWidget.setVerticalHeaderItem([0,'行1'])
        self.lcd.setLineWidth(0)
        #self.tableWidget.setStyleSheet("border:2px solid black") 
        self.tableWidget.setObjectName("tableWidget")
        
        self.dial1 = QDial(self)
        self.dial1.setFixedSize(100, 100)                     
        self.dial1.setRange(0, 180)                
        self.dial1.setNotchesVisible(True)    
        #self.dial.valueChanged.connect(self.on_change_func)     
        self.dial1.move(750,250)
        self.dial_label1 = QLabel('未定位', self)
        #self.dial_label1.setFont(QFont('Arial Black', 8))
        self.dial_label1.move(750,360)
        self.dial_label1.resize(300,20)
        
        self.dial2 = QDial(self)
        self.dial2.setFixedSize(100, 100)                     
        self.dial2.setRange(0, 180)                
        self.dial2.setNotchesVisible(True)    
        #self.dial.valueChanged.connect(self.on_change_func)     
        self.dial2.move(900,250)
        self.dial_label2 = QLabel('未定位', self)
        #self.dial_label2.setFont(QFont('Arial Black', 8))
        self.dial_label2.move(900,360)
        self.dial_label2.resize(300,20)
        
        
        self.btn1 = QToolButton(self)
        self.btn1.setArrowType(Qt.RightArrow)
        self.btn1.setText("开始")
        self.btn1.resize(100,30)
        self.btn1.move(900,750)
        self.btn1.pressed.connect(self.timer1_start)
        
        self.btn2 = QToolButton(self)
        self.btn2.setText("暂停")
        self.btn2.resize(100,30)
        self.btn2.move(900,800)
        self.btn2.pressed.connect(self.timer1.stop)
        #self.btn.setIcon(QIcon("icon.ico"))
        
        self.combobox_1 = QComboBox(self)
        self.com_list = []
        for i in range(20):
            self.com_list.append('COM'+str(i))
        self.com = 'COM0'
        self.combobox_1.addItems(self.com_list)
        self.combobox_1.setCurrentIndex(0)
        self.combobox_1.currentIndexChanged.connect(self.change_com)
        self.combobox_1.resize(100,30)
        self.combobox_1.move(750,750)
        
        self.combobox_2 = QComboBox(self)
        self.baud_rate_list = ['1200','2400','4800','9600','19200','38400','57600','115200']
        self.baud_rate = 9600
        self.combobox_2.addItems(self.baud_rate_list)
        self.combobox_2.setCurrentIndex(3)
        self.combobox_2.currentIndexChanged.connect(self.change_baud_rate)
        self.combobox_2.resize(100,30)
        self.combobox_2.move(750,800)
        
        self.copy_right = QLabel('copy right 袁伟宁', self)
        self.copy_right.resize(150,30)
        self.copy_right.move(1320,870)
        
        self.setGeometry(200, 100, 1500, 900)
        self.setWindowTitle('GNSS 分析软件')   
        self.show()
        
        self.ser = None
        #self.ser_init()
        self.states = collections.defaultdict(lambda:'') #定位方式,时分秒,年月日,维度,南/北,精度,东/西,航向,速率
        
        
    def ser_init(self):
        if self.ser is not None:
            self.ser = None
        try:
            self.ser = serial.Serial(self.com,self.baud_rate,timeout=5)  
            self.ser.flushInput() 
        except:
            return
        
    def timer1_init(self):
        self.timer1=QTimer(self)
        self.timer1.timeout.connect(self.step)
        self.timer1.start(1000)
        
    def timer1_start(self):
        self.ser_init()
        self.timer1.start(1000)
        
    def change_com(self):
        idx = self.combobox_1.currentIndex()
        self.com = self.com_list[idx]
        
    def change_baud_rate(self):
        idx = self.combobox_2.currentIndex()
        self.baud_rate = int(self.baud_rate_list[idx])
        
    def radar_show(self):
        self.radar.setGeometry(50,250,600,600)
        self.radar.setPixmap(self.radar_image)
        self.radar.setScaledContents(True)
        
    def each_satellite_show(self, i, s_type, item):
        if s_type == 'GPS':
            image = self.gps_image
        elif s_type == 'GLONASS':
            image = self.glonass_image
        elif s_type == 'BDS':
            image = self.bds_image
        else:
            return
        lb = self.satellites_label[i]
        radius = 10
        lb.setGeometry(float(item[0]-radius),float(item[1]-radius),radius*2,radius*2)
        lb.setPixmap(image)
        lb.setScaledContents(True)
        lb.show()
        
    def satellites_show(self):
        for s in self.satellites_label:
            s.hide() 
        self.satellites_label = []
        for i, s in enumerate(self.satellites):
            s_type = s[0]
            elevation = s[1]
            azimuth = s[2]
            SNR = s[3]
            
            cosLen = math.cos(elevation*math.pi/180)*self.radius
            y = -1*math.cos(azimuth*math.pi/180)*cosLen+self.middle[1]
            x = math.sin(azimuth*math.pi/180)*cosLen+self.middle[0]
            self.satellites_label.append(QLabel(self.radar))
            self.each_satellite_show(i, s_type,[x,y])
    
    def time_show(self):
        #self.states = {'local_time_year':'311020','local_time':'090150.00'}
        if self.states['local_time_year'] == '' or self.states['local_time'] == '':
            return
        temp = self.states['local_time_year']
        str1 = '20'+temp[4:6]+'-'+temp[2:4]+'-'+temp[0:2]+' '
        temp = self.states['local_time']
        str2 = str((int(temp[0:2])+8)%24)+':'+temp[2:4]+':'+temp[4:6]
        self.time = str1+str2
        self.lcd.display(self.time)
        
    def browser_show(self):
        for r in self.recv:
            if r[:1] == b"$":
                self.textEdit.setPlainText(r.decode('gbk'))
                self.text_browser.append(self.textEdit.toPlainText())
    
    def frame_show(self):
        self.Items[0] = QTableWidgetItem(self.states['latitude_diretion'])
        self.Items[1] = QTableWidgetItem(self.states['latitude'])
        self.Items[2] = QTableWidgetItem(self.states['longtitude_diretion'])
        self.Items[3] = QTableWidgetItem(self.states['longtitude'])
        self.Items[4] = QTableWidgetItem(self.states['diretion'])
        self.Items[5] = QTableWidgetItem(self.states['speed'])
        self.Items[6] = QTableWidgetItem(self.states['s_type'])
        for i in range(7):    
            self.Items[i].setTextAlignment(Qt.AlignHCenter|Qt.AlignVCenter)
            self.tableWidget.setItem(i,0,self.Items[i])
            
    def dial_show(self):
        self.dial_label1.setText('未定位')
        self.dial_label2.setText('未定位')
        if self.states['latitude'] == '' or self.states['longtitude'] == '':
            return
        if self.states['latitude'] != '':
            self.dial1.setValue(float(self.states['latitude']))
            if self.states['latitude_diretion'] == 'N':
                self.dial_label1.setText('北纬 ' + str(float(self.states['latitude']))[:5] + '°')
            elif self.states['latitude_diretion'] == 'S':
                self.dial_label1.setText('南纬 ' + str(float(self.states['latitude']))[:5] + '°')
        if self.states['longtitude'] != '':
            self.dial2.setValue(float(self.states['longtitude'])) 
            if self.states['longtitude_diretion'] == 'E':
                self.dial_label2.setText('东经 ' + str(float(self.states['longtitude']))[:6] + '°')
            elif self.states['longtitude_diretion'] == 'W':
                self.dial_label2.setText('西经 ' + str(float(self.states['longtitude']))[:6] + '°')
        
            
    def step(self):
        if self.ser is None:
            return
        count = self.ser.inWaiting() 
        if count !=0 :
            self.recv = self.ser.readlines(self.ser.in_waiting)
            print(self.recv)
            self.satellites = []
            self.browser_show()
            for r in self.recv:
                #print(str(r))
                if 'GSV' in str(r):
                    self.satellites += decode_GSV(r) #卫星个数可用len(satellites)
                elif 'GGA' in str(r):
                    decode_GGA(self.states, r)
                elif 'RMC' in str(r):
                    decode_RMC(self.states, r)
            self.satellites_show()
            self.time_show()
            self.frame_show()
            self.dial_show()
Exemplo n.º 25
0
class Example(QWidget):
    num = randint(10, 50)
    moves = 10
    btn1num = randint(1, 10)
    btn2num = randint(-10, -5)

    def __init__(self):
        super().__init__()
        self.initUI()
        self.s = 0

    def initUI(self):
        self.setGeometry(340, 200, 340, 200)
        self.setWindowTitle('Фокус со словами')

        self.mes = QLineEdit(self)
        self.mes.resize(300, 30)
        self.mes.move(20, 20)
        self.mes.setReadOnly(True)

        self.btn1 = QPushButton(self)
        self.btn1.move(20, 60)
        self.btn1.resize(90, 35)
        self.btn1.setText(str(self.btn1num))
        self.btn1.clicked.connect(self.func)

        self.btn2 = QPushButton(self)
        self.btn2.move(230, 60)
        self.btn2.resize(90, 35)
        self.btn2.setText(str(self.btn2num))
        self.btn2.clicked.connect(self.func)

        self.label1 = QLabel(self)
        self.label1.setText("Ходов осталось:")
        self.label1.move(20, 120)

        self.label2 = QLabel(self)
        self.label2.setText("Текущее число:")
        self.label2.move(20, 160)

        self.move = QLCDNumber(self)
        self.move.resize(100, 30)
        self.move.move(200, 113)
        self.move.display(self.moves)

        self.numb = QLCDNumber(self)
        self.numb.resize(100, 30)
        self.numb.move(200, 153)
        self.numb.display(self.num)

    def func(self):
        a = int(self.sender().text())
        self.num += a
        self.moves -= 1
        end = False
        self.numb.display(self.num)
        self.move.display(self.moves)
        if self.num == 0:
            self.mes.setText('Вы выиграли!')
            end = True
        elif self.moves == 0:
            self.mes.setText('Вы проиграли!')
            end = True
        if end:
            self.num = randint(10, 50)
            self.moves = 10
            self.btn1num = randint(1, 10)
            self.btn2num = randint(-10, -1)
            self.btn1.setText(str(self.btn1num))
            self.btn2.setText(str(self.btn2num))
Exemplo n.º 26
0
class Input_serial_Node(Node):
    def __init__(self,
                 main_obg,
                 parametrs=['3', 'Ввод', '50', '50', '5', '1']):
        super().__init__(main_obg, parametrs[1], int(parametrs[2]),
                         int(parametrs[3]))

        self.index_comand = parametrs[4]
        self.sizeLCD = float(parametrs[5])

        # |--------------------------------------------| обьявление виджетов

        self.numberLCD = QLCDNumber(self.main_window_obg)
        self.numberLCD.resize(int(80 * self.sizeLCD), int(27 * self.sizeLCD))

        self.text_set3 = QLabel(self.main_window_obg)
        self.text_set3.setText('Индекс:')
        self.input_line3 = QLineEdit(self.index_comand, self.main_window_obg)
        self.input_line3.textChanged.connect(self.change_index)
        self.input_line3.resize(60, 23)

        self.text_set4 = QLabel(self.main_window_obg)
        self.text_set4.setText('Размер:')
        self.input_line4 = QLineEdit(str(self.sizeLCD), self.main_window_obg)
        self.input_line4.editingFinished.connect(self.change_size_lcd)
        self.input_line4.resize(60, 23)
        #  |--------------------------------------------|
        #  Список всех виджетов нода и их относительных координат
        self.arr_of_elem.extend([(self.numberLCD, 0, 21),
                                 (self.text_set3, 0, 76),
                                 (self.input_line3, 48, 75),
                                 (self.text_set4, 0, 102),
                                 (self.input_line4, 48, 100)])
        #  Список всех виджетов настроек
        self.elems_of_settings = [
            self.input_line1, self.text_set1, self.input_line3, self.text_set3,
            self.delete_btn, self.input_line4, self.text_set4, self.copy_btn
        ]
        #  Список дополнительных настроек
        for elem in self.elems_of_settings:
            elem.hide()
        # self.big_btn.resize(int(100 * self.size_big_btn), int(30 * self.size_big_btn))
        self.ubdate_cord(self.x, self.y)

    def del_widgets(self):
        if self.delete:
            for elem in self.arr_of_elem:
                elem[0].deleteLater()
            self.delete = False

    def change_size_lcd(self):
        try:
            self.sizeLCD = float(self.input_line4.text())
            self.numberLCD.resize(int(80 * self.sizeLCD),
                                  int(27 * self.sizeLCD))
        except ValueError:
            pass

    def parametrs_return(self):
        return [
            '3', self.name,
            str(self.x),
            str(self.y), self.index_comand,
            str(self.sizeLCD)
        ]

    def change_index(self):
        self.index_comand = self.input_line3.text()

    def displayValue(self, value='error'):
        try:
            indx = value.split()[0]
            com = value.split()[1]
            if indx == self.index_comand:
                self.numberLCD.display(com)
        except:
            pass

    def open_setings(self):
        if self.flag:
            self.settings_btn.setText('▼')
            self.flag = False
            for elem in self.elems_of_settings:
                elem.show()
            self.numberLCD.resize(80, 27)
        else:
            self.settings_btn.setText('▲')
            self.flag = True
            for elem in self.elems_of_settings:
                elem.hide()
            self.numberLCD.resize(int(80 * self.sizeLCD),
                                  int(27 * self.sizeLCD))

    def is_keyword(self):
        return False
Exemplo n.º 27
0
class AlarmWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        # Флаг, чтобы функция вызова будильника не вызвыалась с каждым тиком
        self.flag_get_up = True
        # Нулевое время для сброса часов
        self.zero_time = QTime(0, 0)
        # Пустая ссылка
        self.url = QUrl()
        # Инициализируем плеер и плейлист, который после зацикливаем
        self.playlist = QMediaPlaylist(self)
        self.playlist.setPlaybackMode(QMediaPlaylist.Loop)
        self.player = QMediaPlayer()
        # Кнопка для выбора файла с музыкой
        self.btn_getfile = QPushButton('Выбрать файл', self)
        self.btn_getfile.setFont(QFont('Times', 10))
        self.btn_getfile.move(142.5, 25)
        self.btn_getfile.resize(215, 50)
        self.btn_getfile.setVisible(False)
        self.btn_getfile.clicked.connect(self.getfile)
        # Радио-кнопка для включения будильника
        self.radio_btn1 = QRadioButton('вкл', self)
        self.radio_btn1.move(0, 15)
        self.radio_btn1.setFont(QFont('Times', 10))
        self.radio_btn1.toggled.connect(self.on_off)
        # Радио-кнопка для выключения будильника
        self.radio_btn2 = QRadioButton('выкл', self)
        self.radio_btn2.move(0, 40)
        self.radio_btn2.setChecked(True)
        self.radio_btn2.setFont(QFont('Times', 10))
        self.radio_btn2.toggled.connect(self.on_off)
        # Значение будильника
        self.timer_edit = QTimeEdit(self)
        self.timer_edit.setDisplayFormat('hh:mm')
        self.timer_edit.move(200, 110)
        self.timer_edit.resize(100, 50)
        self.timer_edit.setFont(QFont('Times', 18, QFont.Bold))
        self.timer_edit.setVisible(False)
        # Бирка
        self.lbl = QLabel('Будильник:', self)
        self.lbl.move(0, 0)
        self.lbl.setFont(QFont('Times', 10))
        # Подсказка для кнопки выбора мелодии
        self.lbl2 = QLabel('Выберите мелодию для будильника:', self)
        self.lbl2.move(142.5, 0)
        self.lbl2.setVisible(False)
        self.lbl2.setFont(QFont('Times', 10))
        # Бирка
        self.lbl3 = QLabel('Будильник установлен на:', self)
        self.lbl3.move(175, 185)
        self.lbl3.setFont(QFont('Times', 10))
        self.lbl3.setVisible(False)
        # Бирка
        self.lbl4 = QLabel('Установите время будильника:', self)
        self.lbl4.move(150, 85)
        self.lbl4.setFont(QFont('Times', 10))
        self.lbl4.setVisible(False)
        # Кнопка выключения будильника, когда он сработает
        self.btn = QPushButton('Выключить\nбудильник', self)
        self.btn.clicked.connect(self.awake)
        self.btn.resize(100, 100)
        self.btn.move(200, 200)
        self.btn.setFont(QFont('Times', 11, QFont.ExtraBold))
        self.btn.setVisible(False)
        # Дисплей для вывода значения будильника
        self.dis2 = QLCDNumber(self)
        self.dis2.move(200, 210)
        self.dis2.resize(100, 50)
        self.dis2.setVisible(False)
        # Дисплей с текущим временем
        self.dis1 = QLCDNumber(self)
        self.dis1.move(375, 25)
        self.dis1.resize(100, 50)
        # Бирка
        self.lbl5 = QLabel('Сейчас:', self)
        self.lbl5.move(375, 0)
        self.lbl5.setFont(QFont('Times', 10))
        # Таймер
        self.nTimer = QTimer()
        self.nTimer.timeout.connect(self.repeatTime)
        self.nTimer.start()

    def initUI(self):
        self.setGeometry(100, 100, 500, 500)
        self.setWindowTitle('Будильник')

    def repeatTime(self):
        # Вытаскиваем системное время и преобразуем в строку
        self.time = QTime().currentTime()
        time_text = self.time.toString('hh:mm')
        # Вытаскиваем выставленное значение будильника и преобразуем в строку
        timer = self.timer_edit.time()
        timer_text = timer.toString('hh:mm')
        # Выводим значения будильника на дисплей
        self.dis2.display(timer_text)
        # Выводим текущее время
        self.dis1.display(time_text)
        # Проверяем условия срабатывания будильника
        if timer_text == time_text and self.flag_get_up and self.radio_btn1.isChecked(
        ):
            self.flag_get_up = False
            self.get_up()
        else:
            self.flag_get_up = True

    def awake(self):
        # Устанавливаем нулевое значение времени будильника
        self.timer_edit.setTime(self.zero_time)
        # Махинация с показом виджетов
        self.lbl.setVisible(True)
        self.lbl2.setVisible(True)
        self.lbl3.setVisible(True)
        self.lbl4.setVisible(True)
        self.radio_btn1.setVisible(True)
        self.radio_btn2.setVisible(True)
        self.btn_getfile.setVisible(True)
        self.dis2.setVisible(True)
        self.timer_edit.setVisible(True)
        self.btn.setVisible(False)
        # Останавливаем музыку
        self.player.stop()

    def get_up(self):
        # Махинации с показом виджетов
        self.lbl.setVisible(False)
        self.lbl2.setVisible(False)
        self.lbl3.setVisible(False)
        self.lbl4.setVisible(False)
        self.radio_btn1.setVisible(False)
        self.radio_btn2.setVisible(False)
        self.btn_getfile.setVisible(False)
        self.dis2.setVisible(False)
        self.timer_edit.setVisible(False)
        self.btn.setVisible(True)
        # Включаем музыку
        self.player.play()

    def getfile(self):
        # Достаем файл с мелодией и сохраняем её путь
        fname = QFileDialog.getOpenFileName(self, 'Open File', '/home',
                                            'Audio Files (*mp3 *wav)')
        self.url = QUrl.fromLocalFile(fname[0])
        # Устанавливаем музыку в плеер
        self.content = QMediaContent(self.url)
        self.playlist.clear()
        self.playlist.addMedia(self.content)
        self.player.setPlaylist(self.playlist)

    def on_off(self):
        # Включаем/выключаем будильник
        if self.radio_btn1.isChecked():
            self.btn_getfile.setVisible(True)
            self.timer_edit.setVisible(True)
            self.dis2.setVisible(True)
            self.lbl2.setVisible(True)
            self.lbl3.setVisible(True)
            self.lbl4.setVisible(True)
        else:
            self.btn_getfile.setVisible(False)
            self.timer_edit.setVisible(False)
            self.dis2.setVisible(False)
            self.lbl2.setVisible(False)
            self.lbl3.setVisible(False)
            self.lbl4.setVisible(False)
            self.timer_edit.setTime(self.zero_time)
            self.btn.setVisible(False)
            self.player.stop()
Exemplo n.º 28
0
class Temp(QWidget):
    def __init__(self, parent):

        super(Temp, self).__init__(parent)

        self.arguments = Arg_Class()
        
        self.mcTempValue = 0
        self.motorTempValue = 0
        self.highMotorTempValue = 0
        self.highCellTempValue = 0
        self.lowCellTempValue = 0
        
        self.mcTempGauge = QLCDNumber(self)
        self.mcTempGauge.display(str(self.mcTempValue).zfill(1))
        self.mcTempGauge.move(0,0)
        self.mcTempGauge.resize(70,60)
        self.mcTempGauge.setFrameShape(QFrame.NoFrame)
        self.mcTempGauge.setSegmentStyle(QLCDNumber.Flat)
        
        self.mcTemplabel = QLabel(self)
        self.mcTemplabel.setText("highest mc temp: ")
        self.mcTemplabel.move(0,0)

        self.motorTempGauge = QLCDNumber(self)
        self.motorTempGauge.display(str(self.motorTempValue).zfill(1))
        self.motorTempGauge.move(0,50)
        self.motorTempGauge.resize(70,60)
        self.motorTempGauge.setFrameShape(QFrame.NoFrame)
        self.motorTempGauge.setSegmentStyle(QLCDNumber.Flat)
        
        self.motorTemplabel = QLabel(self)
        self.motorTemplabel.setText("motor temp: ")
        self.motorTemplabel.move(0,50)

        self.highMotorTempGauge = QLCDNumber(self)
        self.highMotorTempGauge.display(str(self.highMotorTempValue).zfill(1))
        self.highMotorTempGauge.move(0,100)
        self.highMotorTempGauge.resize(70,60)
        self.highMotorTempGauge.setFrameShape(QFrame.NoFrame)
        self.highMotorTempGauge.setSegmentStyle(QLCDNumber.Flat)
        
        self.highMotorTemplabel = QLabel(self)
        self.highMotorTemplabel.setText("highest motor temp: ")
        self.highMotorTemplabel.move(0,100)

        self.highCellTempGauge = QLCDNumber(self)
        self.highCellTempGauge.display(str(self.highCellTempValue).zfill(1))
        self.highCellTempGauge.move(0,150)
        self.highCellTempGauge.resize(70,60)
        self.highCellTempGauge.setFrameShape(QFrame.NoFrame)
        self.highCellTempGauge.setSegmentStyle(QLCDNumber.Flat)
        
        self.highCellTemplabel = QLabel(self)
        self.highCellTemplabel.setText("highest cell temp: ")
        self.highCellTemplabel.move(0,150)

        self.lowCellTempGauge = QLCDNumber(self)
        self.lowCellTempGauge.display(str(self.lowCellTempValue).zfill(1))
        self.lowCellTempGauge.move(0,200)
        self.lowCellTempGauge.resize(70,60)
        self.lowCellTempGauge.setFrameShape(QFrame.NoFrame)
        self.lowCellTempGauge.setSegmentStyle(QLCDNumber.Flat)
        
        self.lowCellTemplabel = QLabel(self)
        self.lowCellTemplabel.setText("lowest cell temp: ")
        self.lowCellTemplabel.move(0,200)

    @pyqtSlot(float)
    def mcTemp_update(self, value):
        self.mcTempGauge.display(value)
    @pyqtSlot(float)
    def motorTemp_update(self, value):
        self.motorTempGauge.display(value)
    @pyqtSlot(float)
    def highMotorTemp_update(self, value):
        self.highMotorTempGauge.display(value)
    @pyqtSlot(float)
    def highCellTemp_update(self, value):
        self.highCellTempGauge.display(value)
    @pyqtSlot(float)
    def lowCellTemp_update(self, value):
        self.lowCellTempGauge.display(value)
Exemplo n.º 29
0
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(400, 400, 200, 220)
        self.setWindowTitle('Калькулятор')

        ## QLCDNumber для отображения введённых чисел и результатов
        self.table = QLCDNumber(self)
        self.table.display('')
        self.table.move(10,10)
        self.table.resize(180,30)

        ## Создание и размещение на экране кнопок, отвечающих за цифры 1-9
        self.buttons_dig = [QPushButton(str(i),self) for i in range(1,10)]
        k1,k2 = 0,1
        for i in range(9):
            if (i in [0,3,6]):
                k2+=1
                k1 = 0
            k1+=50
            self.buttons_dig[i].move(k1,k2*30)
        ## Создание и размещение на экране кнопок, отвечающих за цифру 0
        self.buttons_dig.append(QPushButton('0',self))
        self.buttons_dig[9].move(100,150)
        ## Создание и размещение на экране кнопок, отвечающих за разделитель целой и дробной части
        self.buttons_dig.append(QPushButton('.',self))
        self.buttons_dig[10].move(150,150)
        ## Подключение функционала к кнопкам
        for i in self.buttons_dig:
            i.clicked.connect(self.run)

        ## Создание и размещение на экране кнопок, отвечающих за математические опрации и очистку экрана
        self.plus_btn = QPushButton('+',self)
        self.plus_btn.move(5,60)
        self.minus_btn = QPushButton('-',self)
        self.minus_btn.move(5, 90)
        self.divise_btn = QPushButton('/',self)
        self.divise_btn.move(5,120)
        self.mult_btn = QPushButton('*',self)
        self.mult_btn.move(5,150)
        self.eq_btn = QPushButton('=',self)
        self.eq_btn.move(50,150)
        self.clear_btn = QPushButton('C',self)
        self.clear_btn.move(0,180)
        self.clear_btn.resize(200,30)
        self.clear_btn.clicked.connect(self.clear)

        for i in (self.plus_btn,self.minus_btn,self.mult_btn,self.divise_btn):
            i.clicked.connect(self.calc)

        self.eq_btn.clicked.connect(self.result)

        ## Переменная, в которых хранятся последнее введённое число/результат вычисленного выражения
        self.data = ''
        ## Переменная, в которых хранятся выражение, которое нужно подсчитать
        self.data_eval = ''


    def run(self):
        ## Формируется число, с помощью нажатий кнопок и отображается на дисплее
        if self.sender().text()=='.':
            if '.' in self.data:
                return
        if self.data!='0' or (self.data=='0' and self.sender().text()=='.'):
            self.data = self.data+self.sender().text()
            self.data_eval = self.data_eval+self.sender().text()
            self.table.display(self.data)
        else:
            self.data = self.sender().text()
            self.data_eval = self.sender().text()
            self.table.display(self.data)


    def clear(self):
        self.data = ''
        self.data_eval = ''
        self.table.display('')

    def result(self):
        ## Происходит попытка вычисления выражения, в случае попытки деления на 0, выводится ошибка
        try:
            float(self.data_eval)
        except:
            try:
                self.data = eval(self.data_eval)
                self.data_eval = str(self.data)
                self.table.display(self.data)
            except ZeroDivisionError:
                self.table.display('Error')
            except:
                pass
        self.data = ''


    def calc(self):
        ## Происходит вычисление текущего выражения и дописывается новый знак. Если последним был уже знак действия, то он менятся.
        if self.data_eval:
            self.result()
            if (self.data_eval[-1] not in ['+','-','/','*']):
                self.data_eval += self.sender().text()
            else:
                self.data_eval = self.data_eval[0:len(self.data_eval)-1] + self.sender().text()
Exemplo n.º 30
0
class Journalist(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.k = True
        try:
            with open('main.json', 'r', encoding='utf-8') as f_obj:
                a = json.load(f_obj)
                self.font = QFont()
                self.font.setFamily('Arial')
                self.font.setPointSize(a['FontSize'])
                self.font.setBold(a['FontBold'])
                self.font.setItalic(a['FontItalic'])
                self.boldQcheckBox = QCheckBox(
                    'Сделать Текст Жирным(Чуть жирнее , чем ты)', self)
                self.boldQcheckBox.setChecked(a['FontBold'])
                self.boldQcheckBox.move(1440, 40)
                self.boldQcheckBox.stateChanged.connect(self.set_bold)

                self.italicQcheckBox = QCheckBox(
                    'ItalyText(Да , я из франции)', self)
                self.italicQcheckBox.move(1440, 60)
                self.italicQcheckBox.setChecked(a['FontItalic'])
                self.italicQcheckBox.stateChanged.connect(self.set_italic)

                self.color_btn = a['ButtonFon']

                self.main_text = QTextEdit('Текст статьи', self)
                self.main_text.setFont(self.font)
                self.main_text.move(480, 20)
                self.main_text.resize(960, 540)
                self.k = False
                if a['MainTextFon']:
                    self.main_text.setStyleSheet(
                        'background-image:url({});background-position: center;background-norepeat'
                        .format(a['MainTextFon']))
                else:
                    self.main_color = a['MainTextColor']
                    self.main_text.setStyleSheet("background-color: {}".format(
                        self.main_color))

        except Exception as ex:
            if self.k:
                with open('main.json', 'w', encoding='utf-8') as f_obj:
                    slovar = {
                        'FontSize': 8,
                        'FontBold': False,
                        'FontItalic': False,
                        'ButtonFon': '#ffffff',
                        'MainTextColor': '#ffffff',
                        'MainTextFon': ''
                    }
                    json.dump(slovar, f_obj, ensure_ascii=False)
                    self.font = QFont()
                    self.font.setFamily('Arial')
                    self.font.setPointSize(slovar['FontSize'])
                    self.boldQcheckBox = QCheckBox(
                        'Сделать Текст Жирным(Чуть жирнее , чем ты)', self)
                    self.boldQcheckBox.move(1440, 40)
                    self.boldQcheckBox.stateChanged.connect(self.set_bold)
                    self.italicQcheckBox = QCheckBox(
                        'ItalyText(Да , я из франции)', self)
                    self.italicQcheckBox.move(1440, 60)
                    self.italicQcheckBox.stateChanged.connect(self.set_italic)
                    self.color_btn = slovar['ButtonFon']

                    self.main_text = QTextEdit('Текст статьи', self)
                    self.main_text.setFont(self.font)
                    self.main_text.move(480, 20)
                    self.main_text.resize(960, 540)

            else:
                print(ex)
                QMessageBox.critical(
                    QWidget(), 'Произошол троллинг',
                    'Картинка , которая ранее использовалась вами как фон была потеряна'
                )

        self.text = ''
        self.alz = QFont()
        self.alz.setFamily('Arial')
        self.alz.setBold(True)
        self.alz.setPointSize(24)
        self.setGeometry(0, 0, 1920, 1080)
        self.setWindowTitle('Journalist')
        self.setFixedSize(1920, 1080)

        self.name_text = QLineEdit('Название статьи', self)
        self.name_text.move(480, 0)
        self.name_text.resize(960, 20)

        self.buttons = []
        self.vkButton = QPushButton(self)
        self.vkButton.setText('Авторизироваться в VK')
        self.vkButton.move(0, 0)
        self.vkButton.resize(130, 20)
        self.vkButton.clicked.connect(self.vk_auth)
        self.buttons.append(self.vkButton)

        self.vk_authed = False

        self.btn_analiz = QPushButton('Анализировать тафтологию', self)
        self.btn_analiz.move(0, 20)
        self.btn_analiz.clicked.connect(self.analiz_taftalogy)
        self.buttons.append(self.btn_analiz)

        posx = 80
        posy = 100
        butts = '©™®°$¢€£‰µ≠§←↓↑→'
        self.btn = []
        for i in range(16):
            self.btn = QPushButton(butts[i], self)
            self.btn.resize(posx, posy)
            self.btn.move(i % 4 * posx, i // 4 * posy + 40)
            self.btn.clicked.connect(self.add_symbol)
            self.buttons.append(self.btn)
        buttns = '123*456=789/+0-C'
        for i in range(16):
            self.btn = QPushButton(buttns[i], self)
            self.btn.resize(posx, posy)
            self.btn.move(i % 4 * posx + 1440, i // 4 * posy + 200)
            self.btn.clicked.connect(self.calculat)
            self.buttons.append(self.btn)
        self.LCD_count = QLCDNumber(self)
        self.LCD_count.resize(320, 100)
        self.LCD_count.move(1440, 100)

        self.create_mark = QPushButton('Добавить оценок', self)
        self.create_mark.move(480, 560)
        self.create_mark.resize(480, 20)
        self.create_mark.clicked.connect(self.create_mark_func)
        self.buttons.append(self.create_mark)

        self.save_as_button = QPushButton('Сохранить как', self)
        self.save_as_button.move(1440, 0)
        self.save_as_button.clicked.connect(self.saveFileNamesDialog)
        self.buttons.append(self.save_as_button)

        self.main_text_color_button = QPushButton(
            'Изменить цвет главного текста', self)
        self.main_text_color_button.move(1525, 0)
        self.main_text_color_button.clicked.connect(self.main_text_color)
        self.buttons.append(self.main_text_color_button)

        self.main_text_fon_button = QPushButton('Изменить фон главного текста',
                                                self)
        self.main_text_fon_button.move(1525, 20)
        self.main_text_fon_button.resize(170, 20)
        self.main_text_fon_button.clicked.connect(self.main_text_fon)
        self.buttons.append(self.main_text_fon_button)

        self.button_color_btn = QPushButton('Изменить фон всех кнопок', self)
        self.button_color_btn.move(1692, 0)
        self.button_color_btn.clicked.connect(self.button_color)
        self.buttons.append(self.button_color_btn)

        self.btn_set_font_size = QPushButton('Изменить шрифт главного текста',
                                             self)
        self.btn_set_font_size.move(1692, 20)
        self.btn_set_font_size.clicked.connect(self.set_font_size)
        self.buttons.append(self.btn_set_font_size)

        self.vkButton_post = QPushButton(self)
        self.vkButton_post.setText('Выпустить статью в ВК')
        self.vkButton_post.move(195, 0)
        self.vkButton_post.resize(130, 20)
        self.vkButton_post.clicked.connect(self.send_vk)
        self.vkButton_post.setVisible(False)
        self.buttons.append(self.vkButton)
        self.mark_ready = False
        self.final_mark_text = QLabel('', self)
        self.text_alz = QLabel('', self)
        self.text_alz.move(0, 440)

        for i in self.buttons:
            i.setStyleSheet("background-color: {}".format(self.color_btn))

    def analiz_taftalogy(self):
        try:
            morph = pymorphy2.MorphAnalyzer()
            worlds = []
            worlds_true = []
            translator = str.maketrans('', '', string.punctuation)
            a = str(self.main_text.toPlainText()).split()
            for i in a:
                i = i.translate(translator)
                worlds.extend(map(lambda x: x.lower(), i.split()))
            worlds_set = list(
                set(morph.parse(i)[0].normal_form for i in worlds))
            worlds_normal = [morph.parse(i)[0].normal_form for i in worlds]
            for i in worlds_set:
                worlds_true.append(
                    (morph.parse(i)[0].normal_form,
                     int(worlds_normal.count(morph.parse(i)[0].normal_form))))

            worlds_true = sorted(worlds_true, key=lambda x: x[1], reverse=True)
            b = []
            for i in range(len(worlds_true)):
                if i < 10:
                    b.append(
                        str('{} {} : {}'.format(i + 1, worlds_true[i][0],
                                                worlds_true[i][1])))
                else:
                    break
            self.text_alz.setFont(self.alz)
            self.text_alz.setText('\n'.join(b))
            self.text_alz.resize(self.text_alz.sizeHint())
        except Exception as ex:
            print(ex)

    def calculat(self):
        try:
            a = str(self.btn.sender().text())
            if a == '=':
                result = str(eval(self.text))
                self.text = result
                self.LCD_count.display(self.text)
                pyperclip.copy(self.text)
                QMessageBox.information(self, 'Результат',
                                        'Результат скопирован в Буфер обмена',
                                        QMessageBox.Ok | QMessageBox.Cancel)

            elif a == 'C':
                self.text = self.text[:len(self.text) - 1]
                self.LCD_count.display(self.text)
            else:
                self.text = self.text + a
                self.LCD_count.display(self.text)
        except ZeroDivisionError:
            self.text = ''
            self.LCD_count.display('FATALERROR')
        except Exception as ex:
            print(ex)

    def set_bold(self, state):
        try:
            if state == Qt.Checked:
                self.font.setBold(True)
                self.main_text.setFont(self.font)
                with open("main.json", "r") as jsonFile:
                    data = json.load(jsonFile)
                data["FontBold"] = True
                with open("main.json", "w") as jsonFile:
                    json.dump(data, jsonFile)

            else:
                self.font.setBold(False)
                self.main_text.setFont(self.font)
                with open("main.json", "r") as jsonFile:
                    data = json.load(jsonFile)
                data["FontBold"] = False
                with open("main.json", "w") as jsonFile:
                    json.dump(data, jsonFile)
        except Exception as ex:
            print(ex)

    def set_italic(self, state):
        if state == Qt.Checked:
            self.font.setItalic(True)
            self.main_text.setFont(self.font)
            with open("main.json", "r") as jsonFile:
                data = json.load(jsonFile)
            data["FontItalic"] = True
            with open("main.json", "w") as jsonFile:
                json.dump(data, jsonFile)
        else:
            self.font.setItalic(False)
            self.main_text.setFont(self.font)
            with open("main.json", "r") as jsonFile:
                data = json.load(jsonFile)
            data["FontItalic"] = False
            with open("main.json", "w") as jsonFile:
                json.dump(data, jsonFile)

    def set_font_size(self):
        b = ['8', '14', '20', '24', '28', '32', '36', '46', '58', '64', '72']
        i, okBtnpressed = QInputDialog.getItem(self, 'Выберите размер',
                                               'Тут выбирай, если не дебил', b,
                                               0, False)
        if okBtnpressed:
            self.font.setPointSize(int(i))
            self.main_text.setFont(self.font)
            with open("main.json", "r") as jsonFile:
                data = json.load(jsonFile)
            data["FontSize"] = int(i)
            with open("main.json", "w") as jsonFile:
                json.dump(data, jsonFile)

    def button_color(self):
        try:
            self.color_btn = QColorDialog.getColor()
            with open("main.json", "r") as jsonFile:
                data = json.load(jsonFile)
            data["ButtonFon"] = self.color_btn.name()
            with open("main.json", "w") as jsonFile:
                json.dump(data, jsonFile)
            if self.color_btn.isValid():
                for i in self.buttons:
                    i.setStyleSheet("background-color: {}".format(
                        self.color_btn.name()))
        except Exception as ex:
            print(ex)

    def main_text_fon(self):
        try:
            options = QFileDialog.Options()
            options = QFileDialog.DontUseNativeDialog
            photo, _ = QFileDialog.getOpenFileName(self,
                                                   "JournalistOpen",
                                                   "journalist.png",
                                                   "*.png;;*.jpg;;*bmp",
                                                   options=options)
            if photo:
                print(photo)
                self.main_text.setStyleSheet(
                    'background-image:url({});background-position: center;background-norepeat'
                    .format(photo))
                with open("main.json", "r") as jsonFile:
                    data = json.load(jsonFile)
                data["MainTextFon"] = photo
                with open("main.json", "w") as jsonFile:
                    json.dump(data, jsonFile)
        except Exception as ex:
            print(ex)

    def main_text_color(self):
        self.main_color = QColorDialog.getColor()
        if self.main_color.isValid():
            with open("main.json", "r") as jsonFile:
                data = json.load(jsonFile)
            data["MainTextColor"] = self.main_color.name()
            with open("main.json", "w") as jsonFile:
                json.dump(data, jsonFile)
            self.main_text.setStyleSheet("background-color: {}".format(
                self.main_color.name()))

    def add_symbol(self):
        try:
            self.main_text.setText(self.main_text.toPlainText() +
                                   self.btn.sender().text())
        except Exception as ex:
            print(ex)

    def create_mark_func(self):
        self.final_mark_text.setText('')
        a = list(range(1, 11))
        b = []
        for i in a:
            b.append(str(i))
        i, okBtnpressed = QInputDialog.getItem(self, 'Количество кнопок',
                                               'Выберите кол-во кнопок', b, 4,
                                               False)

        try:
            if okBtnpressed:
                self.marks = []
                self.final_mark = []
                for j in range(int(i)):
                    self.marks.append(
                        QLineEdit(
                            'Введите название оценки под номером {}'.format(j +
                                                                            1),
                            self))
                    self.marks[j].resize(470, 40)
                    self.marks[j].move(480 + j % 2 * 480, 560 + j // 2 * 50)
                    self.marks[j].setVisible(True)
                    print(self.marks[j].pos())
                self.create_mark.setVisible(False)
                self.create_sliders = QPushButton('Создать Оценки', self)
                self.create_sliders.move(960, 800)
                self.create_sliders.setVisible(True)
                self.create_sliders.clicked.connect(self.sliders_func)
                self.create_sliders.setStyleSheet(
                    "background-color: {}".format(self.color_btn))
                self.buttons.append(self.create_sliders)

        except Exception as ex:
            print(ex)

    def sliders_func(self):
        try:
            i = len(self.marks)
            self.sliders = []
            for j in range(i):
                self.sliders.append(QSlider(Qt.Horizontal, self))
                self.sliders[j].resize(470, 20)
                self.sliders[j].move(480 + j % 2 * 480, 590 + j // 2 * 50)
                self.sliders[j].setMaximum(10)
                self.sliders[j].setMinimum(0)
                self.sliders[j].setVisible(True)
                print(self.sliders[j].pos())
            for j in self.marks:
                j.setVisible(False)
            self.markstext = []
            for j in range(i):
                a = self.marks[j].text()
                self.markstext.append(QLabel(a, self))
                self.markstext[j].resize(470, 20)
                self.markstext[j].move(480 + j % 2 * 480, 560 + j // 2 * 50)
                self.markstext[j].setVisible(True)
            self.create_sliders.setVisible(False)
            self.slider_ready = QPushButton('Готово', self)
            self.slider_ready.setVisible(True)
            self.slider_ready.move(960, 820)
            self.slider_ready.clicked.connect(self.marks_ready)
            self.slider_ready.setStyleSheet("background-color: {}".format(
                self.color_btn))
            self.buttons.append(self.slider_ready)

        except Exception as ex:
            print(ex)

    def marks_ready(self):
        try:
            self.final_mark = []
            for i, j in zip(self.markstext, self.sliders):
                self.final_mark.append('{} : {}'.format(i.text(), j.value()))
            self.final_mark_text = QLabel('\n'.join(self.final_mark), self)
            self.final_mark_text.setVisible(True)
            self.final_mark_text.move(480, 560)
            self.final_mark_text.resize(480, 560)
            for i in self.sliders:
                i.setVisible(False)
            for i in self.markstext:
                i.setVisible(False)
            self.mark_ready = True
            del (self.marks[:])
            del (self.sliders[:])
            del (self.markstext[:])
            self.create_mark = QPushButton('Добавить оценок', self)
            self.create_mark.move(480, 560)
            self.create_mark.resize(480, 20)
            self.create_mark.clicked.connect(self.create_mark_func)
            self.create_mark.setVisible(True)
            self.create_mark.setStyleSheet("background-color: {}".format(
                self.color_btn))
            self.buttons.append(self.create_mark)
            self.slider_ready.setVisible(False)
        except Exception as ex:
            print(ex)

    def make_form_vk_login(self):
        i, okBtnPressed = QInputDialog.getText(self, "Введите логин",
                                               "Ваш логин")
        if okBtnPressed:
            self.vkLogin = i

    def make_form_vk_paswd(self):
        i, okBtnPressed = QInputDialog.getText(self, "Введите пароль",
                                               "Ваш пароль")

        if okBtnPressed:
            self.vkPaswd = i

    def vk_auth(self):
        try:
            if not self.vk_authed:
                self.make_form_vk_login()
                self.make_form_vk_paswd()
                if not self.vkLogin:
                    raise vk_login_error
                if not self.vkPaswd:
                    raise vk_password_error
                self.vk_session = vk_api.VkApi(self.vkLogin, self.vkPaswd)
                self.vk_session.auth()
                self.vk = self.vk_session.get_api()
                self.vkButton_post.setVisible(True)
                self.vkButton_post.setStyleSheet("background-color: {}".format(
                    self.color_btn))
                self.vk_authed = True
                self.vkButton.setText('Авторизировано')
            else:
                self.vkLogin = ''
                self.vkLogin = ''
                self.vk_authed = False
                self.vkButton_post.setVisible(False)
        except vk_api.BadPassword:
            QMessageBox.critical(QWidget(), 'Ошибка авторизации!',
                                 "Неверный логин или пароль!")
        except vk_login_error:
            QMessageBox.critical(QWidget(), 'Вы не ввели логин',
                                 "Прошу вас извиниться за это")
        except vk_password_error:
            QMessageBox.critical(QWidget(), 'Вы не ввели пароль',
                                 'Прошу вас извиниться за это')

    def send_vk(self):
        if self.vk_authed:
            if self.mark_ready:
                k = str('\n'.join(self.final_mark))
                a = self.name_text.text() + '\n' + self.main_text.toPlainText(
                ) + '\n' + k
            else:
                a = self.name_text.text() + '\n' + self.main_text.toPlainText()
            self.vk.wall.post(message=a)

    def saveFileNamesDialog(self):
        options = QFileDialog.Options()

        options = QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getSaveFileName(self,
                                                  "JournalistSave",
                                                  "journalist.txt",
                                                  "Text Files (*.txt)",
                                                  options=options)
        if fileName:
            try:
                self.saveFileName = open('{}.txt'.format(fileName), 'w')
                print(fileName)
                if self.mark_ready:
                    k = str('\n'.join(self.final_mark))
                    a = self.name_text.text(
                    ) + '\n' + self.main_text.toPlainText() + '\n' + k
                else:
                    a = self.name_text.text(
                    ) + '\n' + self.main_text.toPlainText()

                self.saveFileName.write(a)
                self.saveFileName.close()

            except Exception as ex:
                print(ex)

    def closeEvent(self, QCloseEvent):
        closeornot = QMessageBox.question(
            self, 'Ты дурак, зачем тебе выходить? ',
            "Хочешь сохранить файл напоследок?",
            QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel,
            QMessageBox.Cancel)

        if closeornot == QMessageBox.Yes:
            self.saveFileNamesDialog()
            QCloseEvent.accept()

        if closeornot == QMessageBox.No:
            QCloseEvent.accept()
        if closeornot == QMessageBox.Cancel:
            QCloseEvent.ignore()
Exemplo n.º 31
0
class TimerWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
        # Инициализируем плеер и плейлист, на котором поставим цикличное воспроизведение
        self.playlist = QMediaPlaylist(self)
        self.playlist.setPlaybackMode(QMediaPlaylist.Loop)
        self.player = QMediaPlayer()
        # Создадим пустую ссылку, чтобы программа не крашилась, если пользователь не выберет мелодию
        self.url = QUrl()
        # Подскажем для чего кнопка
        self.lbl = QLabel('Выберите мелодию для таймера:', self)
        self.lbl.move(165, 100)
        # Кнопка для выбора файла с мелодией
        self.btn_getfile = QPushButton('Выбрать файл', self)
        self.btn_getfile.move(200, 125)
        self.btn_getfile.resize(100, 50)
        self.btn_getfile.clicked.connect(self.getfile)
        # Кнопка старта таймера
        self.btn_start = QPushButton('Старт', self)
        self.btn_start.move(225, 225)
        self.btn_start.resize(50, 50)
        self.btn_start.clicked.connect(self.start_timer)
        # Кнопка остановки таймера до того, как он закончит отсчет
        self.btn_stop = QPushButton('Стоп', self)
        self.btn_stop.move(250, 225)
        self.btn_stop.resize(50, 50)
        self.btn_stop.clicked.connect(self.stop_timer)
        self.btn_stop.setVisible(False)
        # Кнопка паузы таймера
        self.btn_pause = QPushButton('Пауза', self)
        self.btn_pause.move(200, 225)
        self.btn_pause.resize(50, 50)
        self.btn_pause.clicked.connect(self.pause_timer)
        self.btn_pause.setVisible(False)
        # Кнопка для продолжения отсчета таймера
        self.btn_continue = QPushButton('Дальше', self)
        self.btn_continue.move(200, 225)
        self.btn_continue.resize(50, 50)
        self.btn_continue.clicked.connect(self.continue_timer)
        self.btn_continue.setVisible(False)
        # Кнопка для выключения таймера, когда он закончит отсчет
        self.btn_off = QPushButton('Выкл', self)
        self.btn_off.move(225, 225)
        self.btn_off.resize(50, 50)
        self.btn_off.clicked.connect(self.timer_off)
        self.btn_off.setVisible(False)
        # Спрашивваем значение таймера
        self.get_timer = QTimeEdit(self)
        self.get_timer.move(185, 175)
        self.get_timer.resize(130, 50)
        self.get_timer.setFont(QFont('Times', 15, QFont.Bold))
        self.get_timer.setDisplayFormat('HH:mm:ss')
        # Дисплей для вывода таймера
        self.dsp = QLCDNumber(self)
        self.dsp.resize(200, 50)
        self.dsp.move(150, 175)
        self.dsp.setVisible(False)
        self.dsp.setDigitCount(8)
        # Таймер
        self.nTimer = QTimer()
        self.nTimer.timeout.connect(self.timer)

    def initUI(self):
        self.setGeometry(100, 100, 500, 500)
        self.setWindowTitle('Таймер')

    def start_timer(self):
        # Добавляем мелодию в плеер
        self.content = QMediaContent(self.url)
        self.playlist.addMedia(self.content)
        self.player.setPlaylist(self.playlist)
        # Выводим начальное значение времени на дисплей
        self.dsp.display(self.get_timer.time().toString('hh:mm:ss'))
        # Переводим время в секунды
        timer = self.get_timer.time()
        timer_text = timer.toString('hh:mm:ss')
        timer_int = list(map(lambda x: int(x), timer_text.split(':')))
        self.timer_in_sec = timer_int[0]*3600 + timer_int[1]*60 + timer_int[2]
        # Проверяем не установили ли нулевое значение
        if self.timer_in_sec == 0:
            self.timer_timeout()
        else:
            # Запускаем таймер
            self.nTimer.start(1000)
            # Махинации с показом кнопок
            self.btn_start.setVisible(False)
            self.btn_pause.setVisible(True)
            self.btn_stop.setVisible(True)
            self.dsp.setVisible(True)
            self.get_timer.setVisible(False)
            self.lbl.setVisible(False)
            self.btn_getfile.setVisible(False)

    def timer(self):
        # Функция обновления таймера и дисплея со временем
        # Делаем обратный отсчет, отнимая каждую секунду единицу из начального значения
        self.timer_in_sec -= 1
        # Переводим целочисленные значения в строку
        timer_text = list(map(lambda x: str(x), [self.timer_in_sec // 3600,
                                                 (self.timer_in_sec % 3600) // 60,
                                                 (self.timer_in_sec % 3600) % 60]))
        # Если один символ, то к нему добавляется ноль
        if len(timer_text[0]) == 1:
            timer_text[0] = '0' + timer_text[0]
        if len(timer_text[1]) == 1:
            timer_text[1] = '0' + timer_text[1]
        if len(timer_text[2]) == 1:
            timer_text[2] = '0' + timer_text[2]
        # Объединяем список в формат hh:mm:ss
        timer_text = ':'.join(timer_text)
        # Выводим текст со временем на дисплей
        self.dsp.display(timer_text)
        # Если таймер дошел до нуля:
        if self.timer_in_sec == 0:
            self.timer_timeout()
        else:
            # Обновляем таймер
            self.nTimer.start(1000)

    def stop_timer(self):
        # Останавливаем таймер
        self.nTimer.stop()
        # Махинации с кнопками
        self.btn_start.setVisible(True)
        self.btn_stop.setVisible(False)
        self.btn_pause.setVisible(False)
        self.dsp.setVisible(False)
        self.btn_continue.setVisible(False)
        self.get_timer.setVisible(True)
        self.btn_getfile.setVisible(True)
        self.lbl.setVisible(True)

    def continue_timer(self):
        # Продолжаем таймер с того места, где остановились
        self.nTimer.start(self.inter)
        # Махинации с показом кнопок
        self.btn_continue.setVisible(False)
        self.btn_pause.setVisible(True)

    def pause_timer(self):
        # Ловим оставшееся время таймера
        self.inter = self.nTimer.remainingTime()
        # Останавливаем таймер и делаем махинации с показом кнопок
        self.nTimer.stop()
        self.btn_pause.setVisible(False)
        self.btn_continue.setVisible(True)

    def timer_off(self):
        # Махинации с кнопками
        self.btn_start.setVisible(True)
        self.dsp.setVisible(False)
        self.get_timer.setVisible(True)
        self.btn_off.setVisible(False)
        self.btn_getfile.setVisible(True)
        self.lbl.setVisible(True)
        # Останавливаем мелодию
        self.player.stop()

    def timer_timeout(self):
        # Останавливаем таймер
        self.nTimer.stop()
        # Махинации с кнопками
        self.get_timer.setVisible(False)
        self.btn_stop.setVisible(False)
        self.btn_pause.setVisible(False)
        self.btn_continue.setVisible(False)
        self.btn_off.setVisible(True)
        self.dsp.setVisible(True)
        self.lbl.setVisible(False)
        self.btn_getfile.setVisible(False)
        # Запускаем функцию воспроизведения мелодии
        self.playmus()

    def playmus(self):
        # Воспроизводим мелодию
        self.player.play()

    def getfile(self):
        # Достаем файл с мелодией и сохраняем её путь
        fname = QFileDialog.getOpenFileName(self, 'Open File', '/home', 'Audio Files (*mp3 *wav)')
        self.url = QUrl.fromLocalFile(fname[0])
Exemplo n.º 32
0
class Miner(QMainWindow):
    def __init__(self):
        super().__init__()
        self.__iconHappy = QIcon("happy.png")
        self.__iconSad = QIcon("sad.png")
        self.__iconWon = QIcon("won.png")
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Сапёр')
        menuBar = self.menuBar()
        subMenu = menuBar.addMenu('Сложность')
        actionLight = subMenu.addAction('Легкий')
        actionLight.triggered.connect(self.changeToLightLevel)
        actionLight.setCheckable(True)
        actionMiddle = subMenu.addAction('Средний')
        actionMiddle.triggered.connect(self.changeToMiddleLevel)
        actionMiddle.setCheckable(True)
        actionHard = subMenu.addAction('Сложный')
        actionHard.triggered.connect(self.changeToHardLevel)
        actionHard.setCheckable(True)
        levelGroup = QActionGroup(self)
        levelGroup.addAction(actionLight)
        levelGroup.addAction(actionMiddle)
        levelGroup.addAction(actionHard)
        actionLight.setChecked(True)
        self.panelHeight = 50
        self.panelMargin = 10
        self.btnState = QPushButton(self)
        self.btnState.clicked.connect(self.restart)
        self.btnState.resize(self.panelHeight, self.panelHeight)
        self.btnState.setIconSize(
            QSize(self.panelHeight - 8, self.panelHeight - 8))
        self.btnState.setIcon(self.__iconHappy)
        self.lblBombs = QLCDNumber(self)
        self.lblBombs.resize(70, self.panelHeight)
        self.lblTimer = QLCDNumber(self)
        self.lblTimer.resize(70, self.panelHeight)
        self.minerField = MinerField(self)
        self.minerField.onGameOver = self.onGameOver
        self.minerField.onBombMarkedChanged = self.onBombMarkedChanged
        self.minerField.move(
            0, self.panelHeight + self.panelMargin * 2 + menuBar.height())
        self.move(100, 100)
        self.__setWidgetsGeometry()
        self.onBombMarkedChanged()
        self.gameTimeInSec = 0
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.changeGameTime)
        self.timer.start(1000)
        self.changeGameTime()
        self.show()

    def __setWidgetsGeometry(self):
        self.setFixedSize(
            self.minerField.geometry().width(),
            self.minerField.geometry().height() + self.minerField.y())
        panelTop = self.panelMargin + self.menuBar().height()
        self.btnState.move(self.width() // 2 - self.btnState.width() // 2,
                           panelTop)
        self.lblBombs.move(
            self.btnState.x() - self.panelMargin - self.lblBombs.width(),
            panelTop)
        self.lblTimer.move(
            self.btnState.x() + self.btnState.width() + self.panelMargin,
            panelTop)

    def onGameOver(self):
        if self.minerField.gameState() == GameState.WIN:
            self.btnState.setIcon(self.__iconWon)
        else:
            self.btnState.setIcon(self.__iconSad)

    def onBombMarkedChanged(self):
        leftBombs = self.minerField.bombs() - self.minerField.markedBombCount()
        if leftBombs < 0:
            leftBombs = 0
        self.lblBombs.display(leftBombs)

    def changeGameTime(self):
        if self.minerField.gameState(
        ) != GameState.RUNNING and self.gameTimeInSec > 0:
            return
        self.lblTimer.display(self.gameTimeInSec)
        self.gameTimeInSec += 1

    def restart(self, rows=None, cols=None, bombs=None):
        self.minerField.restart(rows, cols, bombs)
        self.gameTimeInSec = 0
        self.onBombMarkedChanged()
        self.changeGameTime()
        self.__setWidgetsGeometry()
        self.btnState.setIcon(self.__iconHappy)

    def changeToLevel(self, rows, cols, bombs):
        self.restart(rows, cols, bombs)

    def changeToLightLevel(self):
        self.changeToLevel(9, 9, 10)

    def changeToMiddleLevel(self):
        self.changeToLevel(13, 16, 30)

    def changeToHardLevel(self):
        self.changeToLevel(12, 22, 52)
Exemplo n.º 33
0
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
 
    def initUI(self):
        self.setGeometry(100, 100, 500, 350)
        self.setWindowTitle('Транслитерация')
 
        self.table = QLCDNumber(self)
        self.table.display('')
        self.setStyleSheet("background-color: #EEE8AA; color: #191970; font-family: Times;")
        self.table.move(20, 20)
        self.table.resize(460, 50)            
        
        self.btn = QPushButton('Нажмите, когда введёте слово', self)
        self.btn.resize(self.btn.sizeHint())
        self.btn.move(217, 120)
        self.btn.clicked.connect(self.coding)
 
        self.label = QLabel(self)
        self.label.setText("Здесь отобразится готовый текст")
        self.label.move(40, 30)
 
        self.word_label = QLabel(self)
        self.word_label.setText("Введите слово: ")
        self.word_label.move(40, 90)
 
        self.word_input = QLineEdit(self)
        self.word_input.move(130, 90)
        self.word_input.resize(330, 20)      
        
        ## Пробую 2
        self.table2 = QLabel(self)
        self.table2.move(20, 200)
        self.table2.resize(480, 20)        
        
        self.table3 = QLabel(self)
        self.table3.move(20, 230)
        self.table3.resize(480, 20)
        
        self.table4 = QLabel(self)
        self.table4.move(20, 260)
        self.table4.resize(480, 20)
 
        self.table5 = QLabel(self)
        self.table5.move(20, 290)
        self.table5.resize(480, 20)
        
        ## Пробую
        self.ad_area = QLabel(self)
        self.ad_area.setText("Здесь Вы можете увидеть некотрую информацию о слове:")
        self.ad_area.move(20, 180)   
        
        ## Пробую в кнопки
        self.btn_to_add = QPushButton('Нажмите, чтобы увидеть данные об этом слове', self)
        self.btn_to_add.resize(self.btn_to_add.sizeHint())
        self.btn_to_add.move(132, 145)
        self.btn_to_add.clicked.connect(self.information)    
    
    
    def coding(self):
        self.d = {'А':'A', 'Б':'B', 'В':'V', 'Г':'G', 'Д':'D', 'Е':'E', 'Ё':'E', 'Ж':'Zh', 'З':'Z', 'И':'I','Й':'I','К':'K','Л':'L', 'М':'M', 'Н':'N', 'О':'O', 'П':'P','Р':'R','С':'S','Т':'T','У':'U','Ф':'F','Х':'Kh','Ц':'Tc', 'Ч':'Ch','Ш':'Sh','Щ':'Shch', 'Ы':'Y','Э':'E','Ю':'Iu', 'Я':'Ia', 'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ё':'e', 'ж':'zh', 'з':'z', 'и':'i','й':'i','к':'k','л':'l', 'м':'m', 'н':'n', 'о':'o', 'п':'p','р':'r','с':'s','т':'t','у':'u','ф':'f','х':'kh','ц':'tc', 'ч':'ch','ш':'sh','щ':'shch', 'ы':'y','э':'e','ю':'iu', 'я':'ia' }
        answ = self.word_input.text()
        ans = ''
        for i in answ:
            if i in self.d:
                ans += self.d[i]
            elif i != 'ь' and i != 'Ь' and i != 'ъ' and i != 'Ъ':
                ans += i
        self.label.setText("{}".format(ans))
        self.WORD = ans
    
    def information(self):
        word_to_ad = self.WORD
        word_in_Russian = self.word_input.text()
        self.table2.setText("Оригинал: {};  транслитерация: {}".format(word_in_Russian, word_to_ad))
        self.table3.setText("Длина слова в русском варианте: {};  в транслитерированном: {}".format(len(word_in_Russian), len(word_to_ad)))
        g = ['a', 'u', 'e', 'o', 'y', 'i']
        gg = ['а', 'у', 'о', 'е', 'и', 'я', 'ю', 'ё', 'э', 'ы']
        kk = 0
        for i in word_to_ad:
            if i.lower() in g:
                kk += 1
                
        kkk = 0
        for i in word_in_Russian:
            if i.lower() in gg:
                kkk += 1
                
        self.table4.setText("Количество гласных звуков в русской версии: {};  в транслитерированной версии: {}".format(kkk, kk))
        self.table5.setText("Количество согласных звуков в русской версии: {};  в транслитерированной версии: {}".format(len(word_in_Russian) - kkk, len(word_to_ad) - kk))
Exemplo n.º 34
0
class MainWindow(QMainWindow):
    # 求解完成信号
    done1Signal = pyqtSignal(str)
    done2Signal = pyqtSignal(str)


    def __init__(self):
        super().__init__()
        # 移动两根火柴和移动一根火柴的按钮
        self.twobtn = QPushButton(self)
        self.onebtn = QPushButton(self)
        # 文本输入框以及提示字符,接受输入的等式
        self.tip1 = QLabel(self)
        self.facin1 = QLineEdit(self)
        self.opin = QLineEdit(self)
        self.tipop = QLabel(self)
        self.facin2 = QLineEdit(self)
        self.tip2 = QLabel(self)
        self.ansin = QLineEdit(self)
        self.equaop = QLabel(self)
        self.tipans = QLabel(self)
        self.toolbar = QToolBar()
        # 数码管显示,由于算符无法使用故使用QLabel代替
        self.lcd1 = QLCDNumber(self)
        self.lcd2 = QLCDNumber(self)
        self.lcd3 = QLCDNumber(self)
        self.lcd1.setDigitCount(2)
        self.lcd2.setDigitCount(2)
        self.lcd3.setDigitCount(2)
        self.lcd1.setMode(QLCDNumber.Dec)
        self.lcd2.setMode(QLCDNumber.Dec)
        self.lcd3.setMode(QLCDNumber.Dec)
        self.lcd1.setSegmentStyle(QLCDNumber.Flat)
        self.lcd1.setStyleSheet("border: 2px solid black; color: green; background: silver;")
        self.lcd2.setSegmentStyle(QLCDNumber.Flat)
        self.lcd2.setStyleSheet("border: 2px solid black; color: green; background: silver;")
        self.lcd3.setSegmentStyle(QLCDNumber.Flat)
        self.lcd3.setStyleSheet("border: 2px solid black; color: green; background: silver;")
        self.lcdop = QLabel(self)
        self.lcdeq = QLabel(self)
        # 上翻,下翻展示
        self.last = QPushButton(self)
        self.next = QPushButton(self)
        # 提示信息,提示是否有解,有解还将显示难度系数
        self.tips = QTextBrowser(self)
        # 程序名及版本号
        self.version = 'SmartMatch_v1.1.18'
        # 帮助子窗口
        self.help = HelpWindow()
        # 等式库子窗口
        self.lib = LibraryWindow()
        # 移动一根所有变化的状态空间
        self.closed1 = []
        # 移动两根所有变化的状态空间
        self.closed2 = []
        # 等式列表
        self.showlist = []
        # 是否可保存
        self.allowed = 0
        # 等式列表中当前的等式序号
        self.now = 0
        # 输入为等式的标记
        self.initeq = 0
        # 状态栏
        self.status = self.statusBar()
        self.init_ui()

    def init_ui(self):
        # 两个列表存放搜索结果

        # 默认使用了我的桌面分辨率大小的标准尺寸
        width = 1440
        height = 900
        x = width / 4
        y = height / 4
        w = width / 2
        h = height / 2

        # 创建全屏主窗口
        self.setGeometry(x, y, w, h)
        self.setWindowTitle(self.version)
        self.setWindowIcon(QIcon("../images/icon.jpg"))

        #设置主窗口背景
        palette = QPalette()
        palette.setBrush(self.backgroundRole(), QBrush(QPixmap('../images/background.png')))
        self.setPalette(palette)

        # 进入后的提示信息
        self.status.showMessage("欢迎")

        # 创建工具栏
        self.addToolBar(self.toolbar)

        self.facin1.move(w / 6, h / 4)
        self.facin1.resize(w / 12, h / 12)
        self.facin1.setMaxLength(2)
        self.facin1.setFont(QFont('Roman times', 20, QFont.DemiBold))
        self.facin1.setAlignment(Qt.AlignCenter)

        self.tip1.move(w / 6, h / 6)
        self.tip1.resize(w / 12, h / 12)
        self.tip1.setText('Number1:')
        self.tip1.setFont(QFont('Roman times', 12, QFont.DemiBold))
        self.tip1.setAlignment(Qt.AlignCenter)

        self.opin.move(w/3, h / 4)
        self.opin.resize(w / 24, h / 12)
        self.opin.setMaxLength(1)
        self.opin.setFont(QFont('Roman times', 20, QFont.DemiBold))
        self.opin.setAlignment(Qt.AlignCenter)

        self.tipop.move(5*w/16, h / 6)
        self.tipop.resize(w / 12, h / 12)
        self.tipop.setText('Operator:')
        self.tipop.setFont(QFont('Roman times', 12, QFont.DemiBold))
        self.tipop.setAlignment(Qt.AlignCenter)

        self.facin2.move(11*w/24, h / 4)
        self.facin2.resize(w / 12, h / 12)
        self.facin2.setMaxLength(2)
        self.facin2.setFont(QFont('Roman times', 20, QFont.DemiBold))
        self.facin2.setAlignment(Qt.AlignCenter)

        self.tip2.move(11*w/24, h / 6)
        self.tip2.resize(w / 12, h / 12)
        self.tip2.setText('Number2:')
        self.tip2.setFont(QFont('Roman times', 12, QFont.DemiBold))
        self.tip2.setAlignment(Qt.AlignCenter)

        self.equaop.move(5*w/8, h / 4)
        self.equaop.resize(w / 24, h / 12)
        self.equaop.setText('=')
        self.equaop.setFont(QFont('Roman time2', 20, QFont.DemiBold))
        self.equaop.setAlignment(Qt.AlignCenter)

        self.ansin.move(3*w/4, h / 4)
        self.ansin.resize(w / 12, h / 12)
        self.ansin.setMaxLength(2)
        self.ansin.setFont(QFont('Roman times', 20, QFont.DemiBold))
        self.ansin.setAlignment(Qt.AlignCenter)

        self.tipans.move(3*w/4, h / 6)
        self.tipans.resize(w / 12, h / 12)
        self.tipans.setText('Answer:')
        self.tipans.setFont(QFont('Roman times', 12, QFont.DemiBold))
        self.tipans.setAlignment(Qt.AlignCenter)

        # 移动一根火柴按钮
        self.onebtn.move(w / 3, 3 * h / 8)
        self.onebtn.resize(w / 3, h / 16)
        self.onebtn.setText('搜索只移动一根火柴的结果')
        self.onebtn.setStatusTip('开始搜索只移动一根火柴的所有结果')
        self.onebtn.clicked.connect(lambda: self.startSearch(1))

        # 移动两根火柴按钮
        self.twobtn.move(w / 3, 7 * h / 16)
        self.twobtn.resize(w / 3, h / 16)
        self.twobtn.setText('搜索只移动两根火柴的结果')
        self.twobtn.setStatusTip('开始搜索只移动两根火柴的所有结果')
        self.twobtn.clicked.connect(lambda: self.startSearch(2))

        # LCD显示摆放
        self.lcd1.move(w/6, 7*h/12)
        self.lcd1.resize(w/12, h/8)
        self.lcd2.move(11*w/24, 7*h/12)
        self.lcd2.resize(w/12, h/8)
        self.lcd3.move(3*w/4, 7*h/12)
        self.lcd3.resize(w/12, h/8)
        self.lcdeq.move(5*w/8, 7*h/12)
        self.lcdeq.resize(w/24, h/8)
        self.lcdeq.setText('=')
        self.lcdeq.setStyleSheet("font:30pt;border-width: 2px;border-style: solid;border-color: rgb(0, 0, 0);"
                                 "background:silver;color: green;")
        self.lcdeq.setAlignment(Qt.AlignCenter)
        self.lcdop.move(w/3, 7*h/12)
        self.lcdop.resize(w/24, h/8)
        self.lcdop.setStyleSheet("font:30pt;border-width: 2px;border-style: solid;border-color: rgb(0, 0, 0);"
                                 "background:silver;color: green;")
        self.lcdop.setAlignment(Qt.AlignCenter)

        # 状态信息显示
        self.tips.move(w/6, 3*h/4)
        self.tips.resize(2*w/3, h/10)
        self.tips.setStyleSheet("background:white;font:12pt")

        # 上翻下翻
        self.last.move(w/4, 17*h/20)
        self.last.resize(w/8, h/18)
        self.last.setText('上一个')
        self.last.setStatusTip('查看上一个可行解')
        self.last.clicked.connect(lambda: self.changeShow(1))
        self.next.move(5*w/8, 17*h/20)
        self.next.resize(w/8, h/18)
        self.next.setText('下一个')
        self.next.setStatusTip('查看下一个可行解')
        self.next.clicked.connect(lambda: self.changeShow(2))

        # 退出动作
        exitAct = QAction(QIcon('../images/exit.png'), '&Exit', self)
        # mac系统下的快捷键
        exitAct.setShortcut('command+Q')
        exitAct.setStatusTip('退出')
        exitAct.setToolTip('快捷键:command+Q')
        exitAct.triggered.connect(lambda: self.sureClose())

        # 移动一根火柴动作
        start1Act = QAction(QIcon('../images/start1.png'), '&Start1', self)
        start1Act.setShortcut('command+W')
        start1Act.setToolTip('快捷键:command+W')
        start1Act.setStatusTip('开始搜索只移动一根火柴的所有结果')
        start1Act.triggered.connect(lambda: self.startSearch(1))

        # 移动两根火柴动作
        start2Act = QAction(QIcon('../images/start2.png'), '&Start2', self)
        start2Act.setShortcut('command+E')
        start2Act.setToolTip('快捷键:command+E')
        start2Act.setStatusTip('开始搜索只移动两根火柴的所有结果')
        start2Act.triggered.connect(lambda: self.startSearch(2))

        # 从库中选择等式动作
        openLib = QAction(QIcon('../images/lib.png'), '&Library', self)
        openLib.setShortcut('command+R')
        openLib.setToolTip('快捷键:command+R')
        openLib.setStatusTip('打开已有等式库')
        openLib.triggered.connect(lambda: self.openLibrary())

        # 打开帮助和信息界面
        openHelp = QAction(QIcon('../images/help.png'), '&Help', self)
        openHelp.setShortcut('command+A')
        openHelp.setToolTip('快捷键:command+A')
        openHelp.setStatusTip('打开帮助界面')
        openHelp.triggered.connect(lambda: self.openHelp())

        # 保存可解等式动作
        saveEquation = QAction(QIcon('../images/save.png'), '&Save', self)
        saveEquation.setShortcut('command+S')
        saveEquation.setToolTip('快捷键:command+S')
        saveEquation.setShortcut('保存可解的等式')
        saveEquation.setStatusTip('保存当前的可解等式')
        saveEquation.triggered.connect(lambda: self.saveEquation())

        # 清除输入和工作区动作
        clearAll = QAction(QIcon('../images/clear.png'), 'Clear', self)
        clearAll.setShortcut('command+C')
        clearAll.setToolTip('快捷键:command+C')
        clearAll.setShortcut('清除输入及变量')
        clearAll.setStatusTip('清除输入及变量')
        clearAll.triggered.connect(lambda: self.clearAction())

        self.toolbar.addAction(start1Act)
        self.toolbar.addAction(start2Act)
        self.toolbar.addAction(clearAll)
        self.toolbar.addAction(openLib)
        self.toolbar.addAction(saveEquation)
        self.toolbar.addAction(openHelp)
        self.toolbar.addAction(exitAct)

        # 信号和槽连接
        self.done1Signal.connect(self.getDone1)
        self.done2Signal.connect(self.getDone2)

    # 主功能函数,移动一根或两根全搜索
    def startSearch(self, num):
        self.varClear()
        self.lcdClear()
        common = '请确保{}方格内输入{}。'
        if self.facin1.text() == '':
            warn = QMessageBox.about(self, '错误提示', common.format('Number1', '数字'))
            self.status.showMessage('空输入错误')
        elif self.facin2.text() == '':
            warn = QMessageBox.about(self, '错误提示', common.format('Number2', '数字'))
            self.status.showMessage('空输入错误')
        elif self.ansin.text() == '':
            warn = QMessageBox.about(self, '错误提示', common.format('Answer', '数字'))
            self.status.showMessage('空输入错误')
        elif self.opin.text() == '':
            warn = QMessageBox.about(self, '错误提示', common.format('Operator', '"+", "-"或"*"号'))
            self.status.showMessage('空输入错误')
        else:
            try:
                fac1 = str(self.facin1.text())
                for x in range(0, len(fac1)):
                    int(fac1[x])
                fac2 = str(self.facin2.text())
                for x in range(0, len(fac2)):
                    int(fac2[x])
                ans = str(self.ansin.text())
                for x in range(0, len(ans)):
                    int(ans[x])
            except ValueError:
                warn = QMessageBox.about(self, '类型错误', common.format('Number1, Nubmber2和Answer', '仅为阿拉伯数字'))
                self.status.showMessage('输入类型错误')
            else:
                fac1 = str(self.facin1.text())
                fac2 = str(self.facin2.text())
                op = str(self.opin.text())
                ans = str(self.ansin.text())
                if not(op == '+' or op == '-' or op == '*'):
                    warn = QMessageBox.about(self, '类型错误', common.format('Operator', '"+", "-"或"*"号'))
                    self.status.showMessage('输入类型错误')
                else:
                    base = MatchEquation(fac1, fac2, ans, op)
                    if num == 1:
                        self.closed1 = onePerop(base)
                        self.done1Signal.emit('Done')
                    elif num == 2:
                        self.closed2 = twoPerop(base)
                        self.done2Signal.emit('Done')
                    self.status.showMessage('完成')

    # 打开等式库子窗口,接收选择等式
    def openLibrary(self):
        self.lib.show()
        self.lib.equationSignal.connect(self.getLibequation)

    # 打开帮助界面子窗口
    def openHelp(self):
        self.help.show()

    # 接收等式库子窗口的信号
    def getLibequation(self, connect):
        temp = ''
        for x in range(0, len(connect)):
            if connect[x] == '+' or connect[x] == '-' or connect[x] == '*':
                self.opin.setText(connect[x])
                self.facin1.setText(temp)
                temp = ''
            elif connect[x] == '=':
                self.facin2.setText(temp)
                temp = ''
            else:
                temp = temp + connect[x]
        self.ansin.setText(temp)

    # 接受对移动一根火柴问题求解完成的信号
    def getDone1(self, connect):
        ansNum = 0
        for equation in self.closed1:
            if equation.equal == True:
                ansNum = ansNum + 1
                self.showlist.append(equation)
        if ansNum == 0 or (ansNum == 1 and self.closed1[0] == self.showlist[0]):
            self.tips.setText('很抱歉,该等式通过移动一根火柴无解。')
        elif ansNum > 1 and self.closed1[0] == self.showlist[0]:
            self.allowed = 1
            self.initeq = 1
            self.now = self.now + 1
            info1 = '该问题是将等式变为新的等式问题, 有{}种新等式'
            info2 = '该问题的难度系数为{:.2f}'
            self.tips.setText(info1.format(ansNum - 1) + '<br>' + info2.format(len(self.closed1) / (ansNum - 1)))
            self.lcd1.display(self.showlist[self.now].factor1.tostr())
            self.lcd2.display(self.showlist[self.now].factor2.tostr())
            self.lcd3.display(self.showlist[self.now].answer.tostr())
            self.lcdop.setText(self.showlist[self.now].operator.tostr())
        else:
            self.allowed = 1
            info1 = '通过移动一根火柴使等式成立,有{}种可行的解法'
            info2 = '该问题的难度系数为{:.2f}'
            self.tips.setText(info1.format(ansNum)+'<br>'+info2.format(len(self.closed1) / ansNum))
            self.lcd1.display(self.showlist[self.now].factor1.tostr())
            self.lcd2.display(self.showlist[self.now].factor2.tostr())
            self.lcd3.display(self.showlist[self.now].answer.tostr())
            self.lcdop.setText(self.showlist[self.now].operator.tostr())

    # 接受对移动两根火柴问题求解完成的信号
    def getDone2(self, connect):
        ansNum = 0
        for equation in self.closed2:
            if equation.equal == True:
                ansNum = ansNum + 1
                self.showlist.append(equation)
        if ansNum == 0 or (ansNum == 1 and self.closed2[0] == self.showlist[0]):
            self.tips.setText('很抱歉,该等式通过移动两根火柴无解。')
        elif ansNum > 1 and self.closed2[0] == self.showlist[0]:
            self.allowed = 2
            self.initeq = 1
            self.now = self.now + 1
            info1 = '该问题是将等式变为新的等式问题, 有{}种新等式'
            info2 = '该问题的难度系数为{:.2f}'
            self.tips.setText(info1.format(ansNum - 1) + '<br>' + info2.format(len(self.closed2) / (ansNum - 1)))
            self.lcd1.display(self.showlist[self.now].factor1.tostr())
            self.lcd2.display(self.showlist[self.now].factor2.tostr())
            self.lcd3.display(self.showlist[self.now].answer.tostr())
            self.lcdop.setText(self.showlist[self.now].operator.tostr())
        else:
            self.allowed = 2
            info1 = '通过移动两根火柴使等式成立,有{}种可行的解法'
            info2 = '该问题的难度系数为{:.2f}'
            self.tips.setText(info1.format(ansNum) + '<br>' + info2.format(len(self.closed2)/ansNum))
            self.lcd1.display(self.showlist[self.now].factor1.tostr())
            self.lcd2.display(self.showlist[self.now].factor2.tostr())
            self.lcd3.display(self.showlist[self.now].answer.tostr())
            self.lcdop.setText(self.showlist[self.now].operator.tostr())

    # 接受上下翻信号
    def changeShow(self, flag):
        if flag == 1:
            if self.now == 0 or (self.initeq == 1 and self.now == 1):
                self.status.showMessage('已经是第一个结果')
            else:
                self.now = self.now - 1
        elif flag == 2:
            if self.now + 1 == len(self.showlist):
                self.status.showMessage('已经是最后一个结果')
            else:
                self.now = self.now + 1
        if len(self.showlist) > 0:
            self.lcd1.display(self.showlist[self.now].factor1.tostr())
            self.lcd2.display(self.showlist[self.now].factor2.tostr())
            self.lcd3.display(self.showlist[self.now].answer.tostr())
            self.lcdop.setText(self.showlist[self.now].operator.tostr())
        else:
            self.status.showMessage('您还未输入并求解问题')

    # 保存可行等式
    def saveEquation(self):
        if len(self.showlist) > 0:
            aim = ''
            eq = ''
            flag = 0
            if self.allowed == 1:
                aim = (self.closed1[0].factor1.tostr() + ';' +
                        self.closed1[0].factor2.tostr() + ';' +
                        self.closed1[0].answer.tostr() + ';' +
                        self.closed1[0].operator.tostr() + ';\n')
                eq = (self.closed1[0].factor1.tostr() +
                      self.closed1[0].operator.tostr() +
                      self.closed1[0].factor2.tostr() +
                      '=' +
                      self.closed1[0].answer.tostr())
            elif self.allowed == 2:
                aim = (self.closed2[0].factor1.tostr() + ';' +
                       self.closed2[0].factor2.tostr() + ';' +
                       self.closed2[0].answer.tostr() + ';' +
                       self.closed2[0].operator.tostr() + ';\n')
                eq = (self.closed2[0].factor1.tostr() +
                      self.closed2[0].operator.tostr() +
                      self.closed2[0].factor2.tostr() +
                      '=' +
                      self.closed2[0].answer.tostr())
            else:
                warn = QMessageBox.about(self, '无法保存', '抱歉,不可解等式无法保存!')
                flag = 1
            lib = open('../data/library.txt', 'r+')
            equations = lib.readlines()
            for equation in equations:
                if aim == equation:
                    warn = QMessageBox.about(self, '当前等式已存在', '感谢您的贡献!但您要添加的等式已在库中。')
                    flag = 1
                    break
            if flag == 0:
                lib.writelines(aim)
                # 刷新等式库
                self.lib.combobox.addItem(eq)
            lib.close()
        else:
            warn = QMessageBox.about(self, '无法保存', '抱歉,未被求解并证明可解的等式无法保存!')

    # 清空lcd显示
    def lcdClear(self):
        self.lcd1.display('')
        self.lcd2.display('')
        self.lcd3.display('')
        self.lcdop.setText('')
        self.tips.setText('')

    # 清空所有需保存的变量
    def varClear(self):
        self.closed1.clear()
        self.closed2.clear()
        self.showlist.clear()
        self.now = 0
        self.allowed = 0
        self.initeq = 0

    # 清除输入及变量
    def clearAction(self):
        self.facin1.clear()
        self.facin2.clear()
        self.opin.clear()
        self.ansin.clear()
        self.lcdClear()
        self.varClear()

    # 重写关闭函数
    def closeEvent(self, QCloseEvent):
        reply = QMessageBox.question(self, '退出程序',
                                     "确认要退出吗?",
                                     QMessageBox.Yes | QMessageBox.No,
                                     QMessageBox.No)
        if reply == QMessageBox.Yes:
            QCloseEvent.accept()
        else:
            QCloseEvent.ignore()


    # 关闭窗口确认
    def sureClose(self):
        reply = QMessageBox.question(self, '退出程序',
                                     "确认要退出吗?",
                                     QMessageBox.Yes | QMessageBox.No,
                                     QMessageBox.No)
        if reply == QMessageBox.Yes:
            qApp.quit()
Exemplo n.º 35
0
class The_Main_Window(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(550, 150, 650, 350)
        self.setWindowTitle("World of Words")
        self.setStyleSheet(
            "background-color: #EEE8AA; color: #191970; font-family: Times;")

        self.table = QLCDNumber(self)
        self.table.setStyleSheet(
            'QLCDNumber {background-color: #FFB6C1; color: #191970;}')
        self.table.display('')
        self.table.move(10, 20)
        self.table.resize(380, 50)

        # Когда пользователь будет нажимать на эту кнопку, будет происходить транслитерация
        self.the_main_btn = QPushButton("Нажмите, когда введёте слово", self)
        self.the_main_btn.setStyleSheet(
            'QPushButton {background-color: #8FBC8F; color: #191970;}')
        self.the_main_btn.resize(self.the_main_btn.sizeHint())
        self.the_main_btn.move(10, 120)
        self.the_main_btn.clicked.connect(self.coding)

        self.label = QLabel(self)
        self.label.setText("Здесь отобразится готовый текст")
        self.label.setStyleSheet(
            'QLabel {background-color: #FFB6C1; color: #191970;}')
        self.label.move(20, 30)
        font = QFont('CyrillicOld', 10)
        self.label.setFont(font)

        self.word_label = QLabel(self)
        self.word_label.setText("Введите слово: ")
        self.word_label.move(10, 90)

        self.word_input = QLineEdit(self)
        self.word_input.move(100, 90)
        self.word_input.resize(290, 20)

        self.table2 = QLabel(self)
        self.table2.move(20, 200)
        self.table2.resize(480, 20)

        self.table3 = QLabel(self)
        self.table3.move(20, 230)
        self.table3.resize(480, 20)

        self.table4 = QLabel(self)
        self.table4.move(20, 260)
        self.table4.resize(480, 20)

        self.table5 = QLabel(self)
        self.table5.move(20, 290)
        self.table5.resize(480, 20)

        self.ad_area = QLabel(self)
        self.ad_area.setText(
            "Здесь Вы можете увидеть некоторую информацию о слове:")
        self.ad_area.move(10, 180)
        font = QFont('CyrillicOld', 9)
        self.ad_area.setFont(font)

        self.btn_for_info = QPushButton(
            "Нажмите, чтобы увидеть данные об этом слове", self)
        self.btn_for_info.setStyleSheet(
            'QPushButton {background-color: #8FBC8F; color: #191970;}')
        self.btn_for_info.resize(self.btn_for_info.sizeHint())
        self.btn_for_info.move(10, 150)
        self.btn_for_info.clicked.connect(self.give_info)

        self.pixmap = QPixmap()
        self.image = QLabel(self)
        self.image.move(405, 17)
        self.image.resize(230, 200)
        self.image.setPixmap(self.pixmap)

    def coding(self):
        self.d = {
            'А': 'A',
            'Б': 'B',
            'В': 'V',
            'Г': 'G',
            'Д': 'D',
            'Е': 'E',
            'Ё': 'E',
            'Ж': 'Zh',
            'З': 'Z',
            'И': 'I',
            'Й': 'I',
            'К': 'K',
            'Л': 'L',
            'М': 'M',
            'Н': 'N',
            'О': 'O',
            'П': 'P',
            'Р': 'R',
            'С': 'S',
            'Т': 'T',
            'У': 'U',
            'Ф': 'F',
            'Х': 'Kh',
            'Ц': 'Tc',
            'Ч': 'Ch',
            'Ш': 'Sh',
            'Щ': 'Shch',
            'Ы': 'Y',
            'Э': 'E',
            'Ю': 'Iu',
            'Я': 'Ia',
            'а': 'a',
            'б': 'b',
            'в': 'v',
            'г': 'g',
            'д': 'd',
            'е': 'e',
            'ё': 'e',
            'ж': 'zh',
            'з': 'z',
            'и': 'i',
            'й': 'i',
            'к': 'k',
            'л': 'l',
            'м': 'm',
            'н': 'n',
            'о': 'o',
            'п': 'p',
            'р': 'r',
            'с': 's',
            'т': 't',
            'у': 'u',
            'ф': 'f',
            'х': 'kh',
            'ц': 'tc',
            'ч': 'ch',
            'ш': 'sh',
            'щ': 'shch',
            'ы': 'y',
            'э': 'e',
            'ю': 'iu',
            'я': 'ia'
        }

        origin = self.word_input.text().lower()
        if not all(symbol in 'йцукенгшщзхъфывапролджэячсмитьбюё'
                   or symbol in '1234567890-_=+*&^%$#@!~№;,<.>":?\/ |'
                   for symbol in origin):
            self.label.setText('Ой!!!')
            self.translit = origin
        else:
            answ = self.word_input.text()
            ans = ''
            for i in answ:
                if i in self.d:
                    ans += self.d[i]
                elif i != 'ь' and i != 'Ь' and i != 'ъ' and i != 'Ъ':
                    ans += i
            self.label.setText("{}".format(ans))
            self.translit = ans

    def give_info(self):
        # В этом методе мы будем сравнивать оригинал и транлитерацию по некоторым параметрам
        word_in_translit = self.translit.lower()
        word_in_Russian = self.word_input.text().lower()

        # Если пользователь ввел неподходящее слово или фразу, то мы не транслитерируем и уведомляем его об этом (было в т.ч. до этого)
        if word_in_translit == word_in_Russian:
            self.table2.setText("Ой, что-то пошло не так, поробуйте снова...")
            self.table3.setText("Возможно, Вы не поменяли раскладку...")
        else:
            self.table2.setText("Оригинал: {};  транслитерация: {}".format(
                word_in_Russian, word_in_translit))
            self.table3.setText(
                "Количество символов в оригинале: {};  в транслитерации: {}".
                format(len(word_in_Russian), len(word_in_translit)))

        # Списки букв, гласных и согласных в русском и английском алфавитах
        letters_engl = [chr(i) for i in range(ord('a'), ord('z') + 1)]
        letters_rus = [chr(i) for i in range(ord('а'), ord('я') + 1)]
        vowels_engl = ['a', 'u', 'e', 'o', 'y', 'i']
        vowels_rus = ['а', 'у', 'о', 'е', 'и', 'я', 'ю', 'ё', 'э', 'ы']
        cons_engl = list(
            filter(lambda letter: letter not in vowels_engl, letters_engl))
        cons_rus = list(
            filter(lambda letter: letter not in vowels_rus, letters_rus))

        # Защита от дурака, который ввел слово не на русском или с отличными от русских букв и приведенных ниже символов
        if not all(symbol in letters_rus
                   or symbol in '1234567890-_=+*&^%$#@!~№;,<.>":?\/ |'
                   for symbol in word_in_Russian):
            # Похоже на одно сообщение в несколько строк
            self.table4.setText("Или ввели недопустимые символы..")
            self.table5.setText("Будьте внимательней :))))")
            self.pixmap.load("картинка для ошибки.jpg")
            self.image.setPixmap(self.pixmap)

        else:
            # Она сделана под цвет фона, и её не видно
            self.pixmap.load("картинка на случай не ошибки.jpg")
            self.image.setPixmap(self.pixmap)
            # self.image.resize(1, 1)
            # Непосредственно нахождение количества тех или иных букв в словах
            # Сначала создали список со всеми нужными буквами, чтобы не потерять их
            vow_engl_in_word = list(
                filter(lambda letter: letter in vowels_engl, word_in_translit))
            num_of_vow_engl_in_word = len(vow_engl_in_word)
            vow_rus_in_word = list(
                filter(lambda letter: letter in vowels_rus, word_in_Russian))
            num_of_vow_rus_in_word = len(vow_rus_in_word)
            cons_engl_in_word = list(
                filter(lambda letter: letter in cons_engl, word_in_translit))
            num_of_cons_engl_in_word = len(cons_engl_in_word)
            cons_rus_in_word = list(
                filter(lambda letter: letter in cons_rus, word_in_Russian))
            num_of_cons_rus_in_word = len(cons_rus_in_word)

            self.table4.setText(
                "Количество гласных звуков в русской версии: {};  в транслитерированной версии: {}"
                .format(num_of_vow_rus_in_word, num_of_vow_engl_in_word))
            self.table5.setText(
                "Количество согласных звуков в русской версии: {};  в транслитерированной версии: {}"
                .format(num_of_cons_rus_in_word, num_of_cons_engl_in_word))
Exemplo n.º 36
0
class App(QMainWindow):
    send_to_generator = pyqtSignal(str, tuple, str, str, str)

    def __init__(self):
        super().__init__()
        self.title = "Generator Holzworth"
        self.left = 30
        self.top = 30
        self.width = 720
        self.height = 500
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        # get available ports on start
        self.available_ports = genserialport.list_ports()
        # combo for choose appropriate port
        self.port_select = QComboBox(self)
        self.port_select.addItems(self.available_ports)
        self.port_select.move(550, 400)
        self.port_select.adjustSize()
        # LCDs and labels for frequency, power and phase settings
        self.lcd_frequency_channel1 = QLCDNumber(self)
        self.lcd_frequency_channel1.move(20, 30)
        self.lcd_frequency_channel1.resize(260, 50)
        self.lcd_frequency_channel1.display(100.0)
        self.lcd_frequency_channel1.setDigitCount(11)

        self.channel1_mhz_label = QLabel("MHz", self)
        self.channel1_mhz_label.move(285, 40)
        self.channel1_mhz_label.setFont(QFont("Times", 20))

        self.lcd_power_channel1 = QLCDNumber(self)
        self.lcd_power_channel1.move(350, 30)
        self.lcd_power_channel1.resize(100, 50)
        self.lcd_power_channel1.display(0.0)

        ch1_dbm_label = QLabel("dBm", self)
        ch1_dbm_label.move(455, 40)
        ch1_dbm_label.setFont(QFont("Times", 20))

        self.lcd_phase_channel1 = QLCDNumber(self)
        self.lcd_phase_channel1.move(525, 30)
        self.lcd_phase_channel1.resize(100, 50)
        self.lcd_phase_channel1.display(0.0)

        ch1_degree_label = QLabel(u"°", self)
        ch1_degree_label.move(630, 30)
        ch1_degree_label.setFont(QFont("Times", 20))
        # checkbox to choose channel
        self.label_channel1 = QLabel(u"Kanał 1", self)
        self.label_channel1.move(20, 5)

        self.label_channel2 = QLabel(u"Kanał 2", self)
        self.label_channel2.move(20, 95)

        self.checkbox_channel1 = QCheckBox(u"Kanał 1", self)
        self.checkbox_channel1.move(20, 300)

        self.checkbox_channel2 = QCheckBox(u"Kanał 2", self)
        self.checkbox_channel2.move(20, 330)
        #LCDs and labels for second channel
        self.lcd_frequency_channel2 = QLCDNumber(self)
        self.lcd_frequency_channel2.move(20, 120)
        self.lcd_frequency_channel2.resize(260, 50)
        self.lcd_frequency_channel2.display(100.0)
        self.lcd_frequency_channel2.setDigitCount(11)

        self.f2_label = QLabel("MHz", self)
        self.f2_label.move(285, 130)
        self.f2_label.setFont(QFont("Times", 20))

        self.lcd_power_channel2 = QLCDNumber(self)
        self.lcd_power_channel2.move(350, 120)
        self.lcd_power_channel2.resize(100, 50)
        self.lcd_power_channel2.display(0.0)

        ch2_dbm_label = QLabel("dBm", self)
        ch2_dbm_label.move(455, 130)
        ch2_dbm_label.setFont(QFont("Times", 20))

        self.lcd_phase_channel2 = QLCDNumber(self)
        self.lcd_phase_channel2.move(525, 120)
        self.lcd_phase_channel2.resize(100, 50)
        self.lcd_phase_channel2.display(0.0)

        ch2_degree_label = QLabel(u"°", self)
        ch2_degree_label.move(630, 120)
        ch2_degree_label.setFont(QFont("Times", 20))
        # textbox to edit to set generator parameters
        self.textbox_frequency_set = QLineEdit(self)
        self.textbox_frequency_set.move(20, 220)
        self.textbox_frequency_set.resize(200, 40)

        self.textbox_power_set = QLineEdit(self)
        self.textbox_power_set.move(350, 220)
        self.textbox_power_set.resize(100, 40)

        label_frequency = QLabel(u"Częstotliwość", self)
        label_frequency.move(20, 195)
        label_frequency.adjustSize()

        label_power = QLabel("Moc", self)
        label_power.move(350, 195)

        label_dbm = QLabel("dBm", self)
        label_dbm.move(455, 220)

        label_phase = QLabel(u"Przesunięcie fazy", self)
        label_phase.move(525, 195)
        label_phase.adjustSize()

        self.textbox_phase_set = QLineEdit(self)
        self.textbox_phase_set.move(525, 220)
        self.textbox_phase_set.resize(100, 40)

        label_Hz = QLabel("Hz", self)
        label_Hz.move(230, 220)
        # regular expression for settings
        reg_exp_freq = QRegExp(
            "[0-9]{0,4}[.]{0,1}[0-9]{0,6}[kMG]"
        )  # 4 digits before dot, 6 after, must end with k,M or G
        gen_validator = QRegExpValidator(reg_exp_freq,
                                         self.textbox_frequency_set)
        self.textbox_frequency_set.setValidator(gen_validator)
        # regex for power settings
        reg_exp_power = QRegExp("[-]*[0-9]+[.]*[0-9]{2}")
        gen_validator = QRegExpValidator(reg_exp_power, self.textbox_power_set)
        self.textbox_power_set.setValidator(gen_validator)
        # regex for phase settings
        phase_validator = QRegExpValidator(QRegExp("[0-9]+[.]*[0-9]"),
                                           self.textbox_phase_set)
        self.textbox_phase_set.setValidator(phase_validator)
        # button for refresh available serial ports
        self.ports_button = QPushButton(u"Odśwież porty", self)
        self.ports_button.move(400, 400)
        self.ports_button.clicked.connect(self.refresh_ports)
        self.ports_button.adjustSize()
        # button to set generator
        self.activate_button = QPushButton("Ustaw", self)
        self.activate_button.move(300, 400)
        # thread creation and signals and slots connection
        self.generator_thread = QThread()
        self.generator_worker = GeneratorWorker()
        self.generator_worker.moveToThread(self.generator_thread)
        self.activate_button.clicked.connect(
            self.get_user_input_and_send_to_generator)
        self.send_to_generator.connect(
            self.generator_worker.send_settings_to_generator)
        self.generator_worker.set_display.connect(self.show_on_display)
        self.generator_worker.event_occured.connect(self.show_event)
        self.generator_thread.start()

        self.show()

    def show_on_display(self, setting: str):
        if setting == "frequency":
            user_freq_set = self.textbox_frequency_set.text()
            self.lcd_frequency_channel2.display(
                user_freq_set[0:len(user_freq_set) - 1])
            self.f2_label.setText(
                GeneratorWorker.freq_dict[user_freq_set[len(user_freq_set) -
                                                        1]])
        elif setting == "power":
            self.lcd_power_channel2.display(self.textbox_power_set.text())
        elif setting == "phase":
            self.lcd_phase_channel2.display(self.textbox_phase_set.text())

    def show_event(self, message):
        QMessageBox.about(self, "Komunikat", message)

    def get_user_input_and_send_to_generator(self):
        user_freq = self.textbox_frequency_set.text()
        user_pwr = self.textbox_power_set.text()
        user_ph = self.textbox_phase_set.text()
        current_port = str(self.port_select.currentText())
        active_channels = (self.checkbox_channel1.isChecked(),
                           self.checkbox_channel2.isChecked())
        self.send_to_generator.emit(current_port, active_channels, user_freq,
                                    user_pwr, user_ph)

    def refresh_ports(self):
        self.port_select.clear()
        self.port_select.addItems(genserialport.list_ports())