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)
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')
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)
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())
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)
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])
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)))
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')
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()
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()
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)
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)
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))
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)
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)
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
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)
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)
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
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()
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
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()
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))
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
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()
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)
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()
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()
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])
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)
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))
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()
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))
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())