class UiGameFrame(QFrame): def __init__(self, parent): super(UiGameFrame, self).__init__(parent) self.setupUi() def setupUi(self): # 游戏界面 self.setGeometry(QRect(10, 10, 671, 711)) # self.setStyleSheet("background-image: url(./img/bg.bmp);") self.setFrameShape(QFrame.Box) self.setFrameShadow(QFrame.Sunken) self.setLineWidth(2) self.setObjectName("uiGameFrame") # 房间信息 self.game_info = QLabel(self) self.game_info.setGeometry(QRect(20, 5, 631, 40)) self.game_info.setObjectName("gameInfo") self.game_info.setScaledContents(True) self.game_info.setStyleSheet( 'font-size:20px;font-weight:bold;') self.game_info.setAlignment(Qt.AlignCenter | Qt.AlignTop) # 游戏画面 self.game_frame = QFrame(self) self.game_frame.setGeometry(QRect(80, 145, 504, 504)) # self.game_frame.setStyleSheet("background-image: url(./img/game.bmp);") self.game_frame.setFrameShape(QFrame.Box) self.game_frame.setFrameShadow(QFrame.Plain) self.game_frame.setObjectName("gameFrame") # 对战 self.vs_frame = QFrame(self) self.vs_frame.setGeometry(QRect(50, 55, 270, 80)) self.vs_frame.setFrameShape(QFrame.StyledPanel) self.vs_frame.setFrameShadow(QFrame.Raised) self.vs_frame.setObjectName("vsFrame") # self.vs_frame.setStyleSheet("border:1px solid;") self.vs_user_image = QLabel(self.vs_frame) self.vs_user_image.setGeometry(QRect(5, 5, 70, 70)) self.vs_user_image.setObjectName("vsUserImage") self.vs_user_image.setScaledContents(True) self.vs_user_info = QLabel(self.vs_frame) self.vs_user_info.setGeometry(QRect(80, 5, 120, 70)) self.vs_user_info.setObjectName("vsUserInfo") self.lcdNumber_l = QLCDNumber(self.vs_frame) self.lcdNumber_l.setGeometry(QRect(205, 5, 60, 70)) self.lcdNumber_l.setLineWidth(0) self.lcdNumber_l.setDigitCount(2) self.lcdNumber_l.setSegmentStyle(QLCDNumber.Flat) self.lcdNumber_l.setProperty("intValue", 20) self.lcdNumber_l.setObjectName("lcdNumber_2") self.vs_frame_r = QFrame(self) self.vs_frame_r.setGeometry(QRect(350, 55, 270, 80)) self.vs_frame_r.setFrameShape(QFrame.StyledPanel) self.vs_frame_r.setFrameShadow(QFrame.Raised) self.vs_frame_r.setObjectName("vsFrameR") # self.vs_frame_r.setStyleSheet("border:1px solid;") self.lcdNumber_r = QLCDNumber(self.vs_frame_r) self.lcdNumber_r.setGeometry(QRect(5, 5, 60, 70)) self.lcdNumber_r.setLineWidth(0) self.lcdNumber_r.setDigitCount(2) self.lcdNumber_r.setSegmentStyle(QLCDNumber.Flat) self.lcdNumber_r.setProperty("intValue", 20) self.lcdNumber_r.setObjectName("lcdNumber_3") self.vs_user_image_r = QLabel(self.vs_frame_r) self.vs_user_image_r.setGeometry(QRect(70, 5, 70, 70)) self.vs_user_image_r.setObjectName("vsUserImageR") self.vs_user_image_r.setScaledContents(True) self.vs_user_info_r = QLabel(self.vs_frame_r) self.vs_user_info_r.setGeometry(QRect(145, 5, 120, 70)) self.vs_user_info_r.setObjectName("vsUserInfoR") # 按钮区域 self.cmd_frame = QFrame(self) self.cmd_frame.setGeometry(QRect(55, 655, 560, 47)) self.cmd_frame.setFrameShape(QFrame.StyledPanel) self.cmd_frame.setFrameShadow(QFrame.Raised) self.cmd_frame.setObjectName("cmdFrame") # 开始按钮 self.gameStartBtn = QPushButton(self.cmd_frame) self.gameStartBtn.setGeometry(QRect(10, 10, 100, 27)) self.gameStartBtn.setObjectName("gameStartBtn") # 悔棋按钮 self.gameUndoBtn = QPushButton(self.cmd_frame) self.gameUndoBtn.setGeometry(QRect(120, 10, 100, 27)) self.gameUndoBtn.setObjectName("gameUndoBtn") # 认输按钮 self.gameGiveupBtn = QPushButton(self.cmd_frame) self.gameGiveupBtn.setGeometry(QRect(230, 10, 100, 27)) self.gameGiveupBtn.setObjectName("gameGiveupBtn") # 返回大厅 self.gameReHallBtn = QPushButton(self.cmd_frame) self.gameReHallBtn.setGeometry(QRect(340, 10, 100, 27)) self.gameReHallBtn.setObjectName("gameReHallBtn") # 设置 self.gameSetBtn = QPushButton(self.cmd_frame) self.gameSetBtn.setGeometry(QRect(450, 10, 100, 27)) self.gameSetBtn.setObjectName("gameSetBtn") self.retranslateUi() QMetaObject.connectSlotsByName(self) def retranslateUi(self): _translate = QCoreApplication.translate self.gameStartBtn.setText(_translate("MainWindow", "开始游戏")) self.gameUndoBtn.setText(_translate("MainWindow", "悔棋")) self.gameGiveupBtn.setText(_translate("MainWindow", "认输")) self.gameReHallBtn.setText(_translate("MainWindow", "返回大厅")) self.gameSetBtn.setText(_translate("MainWindow", "设置"))
class 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 NewOrder(QWidget): lcd_num = 10 # 主按钮的状态 # 0:未启动 # 1:正在听取指令 # 2:正在处理指令 main_btn_status = 0 begin_record_order_signal = pyqtSignal(str) def __init__(self, parent=None, title_text: str = ''): super(NewOrder, self).__init__(parent=parent) self.title_text = title_text v_layout = QVBoxLayout(self) splitter = QSplitter(Qt.Vertical) # 运行状态监视器 self.runtime_state_monitor = QTextBrowser() self.runtime_state_monitor.setFontPointSize(18) self.runtime_state_monitor.setText("<h1>" + self.title_text + "</h1>") # 按钮区 btn_widget = QWidget() btn_widget.setMinimumHeight(150) h_layout = QHBoxLayout(self) # 主按钮 self.btn_main = QPushButton("Go") self.btn_main.clicked.connect(self.on_clicked_main_btn) self.btn_main.clicked.connect(self.handle_countdown) # 倒计时,10秒 self.countdown = QLCDNumber() self.countdown.setLineWidth(0) self.countdown.setDigitCount(3) self.countdown.display(str(self.lcd_num)) # 计时 self.timer = QTimer() self.timer.timeout.connect(self.refresh_lcd) h_layout.addWidget(self.countdown) h_layout.addWidget(self.btn_main, alignment=Qt.AlignLeft) btn_widget.setLayout(h_layout) splitter.addWidget(self.runtime_state_monitor) splitter.addWidget(btn_widget) splitter.setStretchFactor(0, 5) splitter.setStretchFactor(1, 5) v_layout.addWidget(splitter) self.setLayout(v_layout) # 主按钮点击 def on_clicked_main_btn(self): if self.main_btn_status == 0: self.runtime_state_monitor.append("开始新指令") self.main_btn_status = 1 # 开始录音 def recorder(): CHUNK = 128 # 每个缓冲区的帧数 FORMAT = pyaudio.paInt16 # 采样位数 CHANNELS = 1 # 单声道 RATE = 16000 # 采样频率 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) # 打开流,传入响应参数 wf = wave.open(r'../voice_cache/v2w.mp3', 'wb') # 打开 mp3 文件。 wf.setnchannels(CHANNELS) # 声道设置 wf.setsampwidth(p.get_sample_size(FORMAT)) # 采样位数设置 wf.setframerate(RATE) # 采样频率设置 while self.main_btn_status == 1: data = stream.read(CHUNK) wf.writeframes(data) # 写入数据 stream.stop_stream() # 关闭流 stream.close() p.terminate() wf.close() convert = MP32PCM(i='../voice_cache/v2w.mp3', o='../voice_cache/v2w.pcm') convert.run() thread = Thread(target=recorder) thread.start() elif self.main_btn_status == 1: self.btn_main.setEnabled(False) self.main_btn_status = 2 self.handle_order() # 处理指令 def handle_order(self): def handler(): sleep(1) self.runtime_state_monitor.append("正在处理") '''''' respond_text = 'Biser' if self.title_text == '新指令': get_words = V2W.get_words() self.runtime_state_monitor.append('识别到:' + get_words) self.begin_record_order_signal.emit(get_words) turing_robot = TuringRobot(get_words) respond_text = turing_robot.get_respond() elif self.title_text == '年龄、性别识别': respond_text = AgeSex.get_age_sex() elif self.title_text == '情感分析': get_words = V2W.get_words() self.runtime_state_monitor.append('识别到:' + get_words) respond_text = Emotion.get_emotion(get_words) gap = W2V.get_voice(respond_text) self.runtime_state_monitor.append(respond_text) mp3_player = MP3Player(r'../voice_cache/w2v.mp3') mp3_player.player() '''''' self.main_btn_status = 0 self.btn_main.setEnabled(True) self.runtime_state_monitor.append("处理结束\n") self.countdown.display("10") thread = Thread(target=handler) thread.start() # 开始QLCDNumber倒计时 def handle_countdown(self): self.timer.stop() self.lcd_num = 10 if self.main_btn_status == 1: self.countdown.display("10") self.timer.start(1000) # 刷新QLCDNumber def refresh_lcd(self): if self.lcd_num > 1: self.lcd_num -= 1 self.countdown.display(str(self.lcd_num)) else: self.timer.stop() self.btn_main.setEnabled(False) self.main_btn_status = 2 self.lcd_num = 10 self.countdown.display("0") self.handle_order()
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(784, 600) self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.Time = QLCDNumber(self.centralwidget) self.Time.setGeometry(QRect(260, 80, 271, 121)) self.Time.setFrameShape(QFrame.Box) self.Time.setFrameShadow(QFrame.Sunken) self.Time.setLineWidth(1) self.Time.setMidLineWidth(0) self.Time.setSmallDecimalPoint(False) self.Time.setDigitCount(8) self.Time.setObjectName("lcdNumber") self.label = QLabel(self.centralwidget) self.label.setGeometry(QRect(220, 0, 341, 61)) font = QFont() font.setBold(False) font.setWeight(50) self.label.setFont(font) self.label.setFocusPolicy(Qt.NoFocus) self.label.setFrameShape(QFrame.NoFrame) self.label.setTextFormat(Qt.AutoText) self.label.setScaledContents(False) self.label.setAlignment(Qt.AlignCenter) self.label.setIndent(-1) self.label.setObjectName("label") self.line = QFrame(self.centralwidget) self.line.setGeometry(QRect(0, 40, 831, 31)) self.line.setFrameShape(QFrame.HLine) self.line.setFrameShadow(QFrame.Sunken) self.line.setObjectName("line") self.line_2 = QFrame(self.centralwidget) self.line_2.setGeometry(QRect(0, 220, 801, 31)) self.line_2.setFrameShape(QFrame.HLine) self.line_2.setFrameShadow(QFrame.Sunken) self.line_2.setObjectName("line_2") self.Melody = QPushButton(self.centralwidget) self.Melody.setGeometry(QRect(-270, 240, 1091, 61)) self.Melody.setObjectName("pushButton") self.Pause = QPushButton(self.centralwidget) self.Pause.setGeometry(QRect(520, 370, 81, 81)) self.Pause.setDefault(True) self.Pause.setFlat(False) self.Pause.setObjectName("pushButton_2") self.Stop = QPushButton(self.centralwidget) self.Stop.setGeometry(QRect(190, 370, 81, 81)) self.Stop.setDefault(True) self.Stop.setObjectName("pushButton_3") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(MainWindow) self.menubar.setGeometry(QRect(0, 0, 784, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.label.setText(_translate("MainWindow", "Таймер")) self.Melody.setText(_translate("MainWindow", "Рингтон")) self.Pause.setText(_translate("MainWindow", "Пауза")) self.Stop.setText(_translate("MainWindow", "Отмена"))