软件成品

master
SQY 5 years ago
parent 19b95a454d
commit b2cc56ec22

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

@ -0,0 +1,120 @@
#当部署到别的计算机时手动改修改PORT 和 ADDR
import socket
import json
import rsa
from binascii import hexlify
import os
import threading
import sys
from PyQt5.QtCore import QObject , pyqtSignal
class Client(QObject):
DISCONNECT_MESSAGE = "!DISCONNECT"
send_data_Signal = pyqtSignal(dict)
send_userlist_Signal = pyqtSignal(dict)
def __init__(self,parent=None):
super(Client,self).__init__(parent)
IP = socket.gethostbyname(socket.gethostname())
PORT = 1
ADDR = (IP, PORT)
self.ADDR = ADDR
self.username = ""
self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.active_users = {}
self.dict={}
def disconnection(self):
data = {"sender": self.username, "receiver": "disconnect", "msg": self.DISCONNECT_MESSAGE}
self.client.send(json.dumps(data).encode())
def set_username(self,username,password):
self.username = username
print("set user name")
print(self.username)
def send_broadcast(self):
print("start broadcast!")
print(self.active_users)
print("activeuser")
for receiver in self.active_users:
print(receiver)
self.send(receiver)
def send(self,receiver):
#data = {"sender": self.username, "receiver": receiver, "msg": msg.decode(),"startdatetime":startdatetime,"enddatetime":enddatetime}
data = self.dict
data["receiver"] = receiver
if receiver in self.active_users.keys():
self.client.send(json.dumps(data).encode())
def update_users(self, users):
#******这里是全体学员信号更新
self.send_userlist_Signal.emit(users)
del users[self.username]
self.active_users = users
def init_data(self):
data = {"username": self.username}
self.client.send(json.dumps(data).encode())
def listen(self):
self.init_data()
while True:
data = self.client.recv(1024).decode()
data = json.loads(data)
if "users" in data.keys():
self.update_users(data["users"])
print("update user!!!!!!!")
print(data["users"])
else:
msg = data["msg"]
if msg == "DISCONNECTING":
print("disconnect!")
break
#*******接收到信息更新列表
self.send_data_Signal.emit(data)
print(f"\n[NEW MESSAGE VERIFIED] {data['sender']}: \nMessage: {msg}", end="")
def receive_from_ui(self,dict):
#dict.update({{"sender": self.username}})
dict["sender"]=self.username
print("receive_from_ui:")
print(dict)
self.dict = dict
def run(self):
try:
print("client runing!")
print("username:"+self.username)
print(f"[CONNECTION] Starting connection to {self.ADDR}")
self.client.connect(self.ADDR)
thread = threading.Thread(target=self.listen)
thread.start()
#self.run_step()
except Exception as e:
pass
def run_step(self):
try:
receiver = self.dict["receiver"]
if receiver == "broadcast":
self.send_broadcast()
else:
self.send(receiver)
except:
print("run_step erro!")
"""
IP = socket.gethostbyname(socket.gethostname())
PORT = 1
ADDR = (IP, PORT)
username = input("Insert username: ")
client = Client(ADDR, username)
client.run()
"""

@ -0,0 +1,56 @@
import socket
import threading
import pyaudio
class Client_voice_cmd:
def __init__(self):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while 1:
try:
self.target_ip = socket.gethostbyname(socket.gethostname())
self.target_port = 2
self.s.connect((self.target_ip, self.target_port))
break
except:
print("Couldn't connect to server")
chunk_size = 1024 # 512
audio_format = pyaudio.paInt16
channels = 1
rate = 20000
# initialise microphone recording
self.p = pyaudio.PyAudio()
self.playing_stream = self.p.open(format=audio_format, channels=channels, rate=rate, output=True,
frames_per_buffer=chunk_size)
self.recording_stream = self.p.open(format=audio_format, channels=channels, rate=rate, input=True,
frames_per_buffer=chunk_size)
print("Connected to Server")
# start threads
receive_thread = threading.Thread(target=self.receive_server_data).start()
self.send_data_to_server()
def receive_server_data(self):
while True:
try:
data = self.s.recv(1024)
self.playing_stream.write(data) # write就是播放数据
except:
pass
def send_data_to_server(self):
while True:
try:
data = self.recording_stream.read(1024) # read就是写回数据
self.s.sendall(data)
except:
pass
#client = Client_voice_cmd()

@ -0,0 +1,56 @@
import socket
import threading
import pyaudio
class Client_voice_stu:
def __init__(self):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while 1:
try:
self.target_ip = socket.gethostbyname(socket.gethostname())
self.target_port = 2
self.s.connect((self.target_ip, self.target_port))
break
except:
print("Couldn't connect to server")
chunk_size = 1024 # 512
audio_format = pyaudio.paInt16
channels = 1
rate = 20000
# initialise microphone recording
self.p = pyaudio.PyAudio()
self.playing_stream = self.p.open(format=audio_format, channels=channels, rate=rate, output=True,
frames_per_buffer=chunk_size)
self.recording_stream = self.p.open(format=audio_format, channels=channels, rate=rate, input=True,
frames_per_buffer=chunk_size)
print("Connected to Server")
# start threads
receive_thread = threading.Thread(target=self.receive_server_data).start()
#self.send_data_to_server()
def receive_server_data(self):
while True:
try:
data = self.s.recv(1024)
self.playing_stream.write(data) # write就是播放数据
except:
pass
def send_data_to_server(self):
while True:
try:
data = self.recording_stream.read(1024) # read就是写回数据
self.s.sendall(data)
except:
pass
#client = Client_voice_stu()

@ -0,0 +1,652 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'cmd_send_msg.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QDate, QDateTime , QTime
from PyQt5.QtCore import pyqtSignal,QObject
import datetime
class Ui_Main_cmd_msg(QMainWindow):
send_data_Signal = pyqtSignal(dict)
send_voice_data_Signal = pyqtSignal()
table_row = 0
def setupUi(self, Main_cmd_msg):
Main_cmd_msg.setObjectName("Main_cmd_msg")
Main_cmd_msg.resize(1011, 866)
self.centralwidget = QtWidgets.QWidget(Main_cmd_msg)
self.centralwidget.setObjectName("centralwidget")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setGeometry(QtCore.QRect(20, 60, 991, 731))
self.tabWidget.setMouseTracking(False)
self.tabWidget.setTabPosition(QtWidgets.QTabWidget.North)
self.tabWidget.setTabShape(QtWidgets.QTabWidget.Triangular)
self.tabWidget.setElideMode(QtCore.Qt.ElideNone)
self.tabWidget.setDocumentMode(False)
self.tabWidget.setTabsClosable(False)
self.tabWidget.setMovable(False)
self.tabWidget.setTabBarAutoHide(False)
self.tabWidget.setObjectName("tabWidget")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName("tab_3")
self.layoutWidget = QtWidgets.QWidget(self.tab_3)
self.layoutWidget.setGeometry(QtCore.QRect(10, 10, 171, 261))
self.layoutWidget.setObjectName("layoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.radioButton_gb = QtWidgets.QRadioButton(self.layoutWidget)
self.radioButton_gb.setObjectName("radioButton_gb")
self.verticalLayout.addWidget(self.radioButton_gb)
self.radioButton_db = QtWidgets.QRadioButton(self.layoutWidget)
self.radioButton_db.setObjectName("radioButton_db")
self.verticalLayout.addWidget(self.radioButton_db)
self.radioButton_dsbb = QtWidgets.QRadioButton(self.layoutWidget)
self.radioButton_dsbb.setObjectName("radioButton_dsbb")
self.verticalLayout.addWidget(self.radioButton_dsbb)
self.textEdit = QtWidgets.QTextEdit(self.tab_3)
self.textEdit.setGeometry(QtCore.QRect(370, 300, 441, 271))
self.textEdit.setObjectName("textEdit")
self.layoutWidget_2 = QtWidgets.QWidget(self.tab_3)
self.layoutWidget_2.setGeometry(QtCore.QRect(360, 140, 445, 131))
self.layoutWidget_2.setObjectName("layoutWidget_2")
self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget_2)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.dateTimeEdit = QtWidgets.QDateTimeEdit(self.layoutWidget_2)
self.dateTimeEdit.setObjectName("dateTimeEdit")
self.gridLayout.addWidget(self.dateTimeEdit, 2, 1, 1, 1)
self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget_2)
self.pushButton_2.setObjectName("pushButton_2")
self.gridLayout.addWidget(self.pushButton_2, 2, 2, 1, 1)
self.pushButton = QtWidgets.QPushButton(self.layoutWidget_2)
self.pushButton.setObjectName("pushButton")
self.gridLayout.addWidget(self.pushButton, 1, 2, 1, 1)
self.label_3 = QtWidgets.QLabel(self.layoutWidget_2)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1)
self.label = QtWidgets.QLabel(self.layoutWidget_2)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.lineEdit = QtWidgets.QLineEdit(self.layoutWidget_2)
self.lineEdit.setObjectName("lineEdit")
self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 2)
self.dateTimeEdit_2 = QtWidgets.QDateTimeEdit(self.layoutWidget_2)
self.dateTimeEdit_2.setObjectName("dateTimeEdit_2")
self.gridLayout.addWidget(self.dateTimeEdit_2, 1, 1, 1, 1)
self.label_2 = QtWidgets.QLabel(self.layoutWidget_2)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
self.label_7 = QtWidgets.QLabel(self.layoutWidget_2)
self.label_7.setObjectName("label_7")
self.gridLayout.addWidget(self.label_7, 3, 0, 1, 1)
self.dateTimeEdit_3 = QtWidgets.QDateTimeEdit(self.layoutWidget_2)
self.dateTimeEdit_3.setObjectName("dateTimeEdit_3")
self.gridLayout.addWidget(self.dateTimeEdit_3, 3, 1, 1, 1)
self.pushButton_4 = QtWidgets.QPushButton(self.layoutWidget_2)
self.pushButton_4.setObjectName("pushButton_4")
self.gridLayout.addWidget(self.pushButton_4, 3, 2, 1, 1)
self.layoutWidget_4 = QtWidgets.QWidget(self.tab_3)
self.layoutWidget_4.setGeometry(QtCore.QRect(370, 570, 441, 91))
self.layoutWidget_4.setObjectName("layoutWidget_4")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.layoutWidget_4)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.pushButton_send_1 = QtWidgets.QPushButton(self.layoutWidget_4)
self.pushButton_send_1.setObjectName("pushButton_send_1")
self.horizontalLayout_2.addWidget(self.pushButton_send_1)
self.pushButton_3 = QtWidgets.QPushButton(self.layoutWidget_4)
self.pushButton_3.setObjectName("pushButton_3")
self.horizontalLayout_2.addWidget(self.pushButton_3)
self.label_4 = QtWidgets.QLabel(self.tab_3)
self.label_4.setGeometry(QtCore.QRect(270, 290, 72, 51))
self.label_4.setObjectName("label_4")
self.gridLayoutWidget = QtWidgets.QWidget(self.tab_3)
self.gridLayoutWidget.setGeometry(QtCore.QRect(0, 370, 261, 171))
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget)
self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
self.gridLayout_2.setObjectName("gridLayout_2")
self.checkBox_2 = QtWidgets.QCheckBox(self.gridLayoutWidget)
self.checkBox_2.setObjectName("checkBox_2")
self.gridLayout_2.addWidget(self.checkBox_2, 0, 1, 1, 1)
self.checkBox_6 = QtWidgets.QCheckBox(self.gridLayoutWidget)
self.checkBox_6.setObjectName("checkBox_6")
self.gridLayout_2.addWidget(self.checkBox_6, 1, 2, 1, 1)
self.checkBox_7 = QtWidgets.QCheckBox(self.gridLayoutWidget)
self.checkBox_7.setObjectName("checkBox_7")
self.gridLayout_2.addWidget(self.checkBox_7, 2, 0, 1, 1)
self.checkBox_9 = QtWidgets.QCheckBox(self.gridLayoutWidget)
self.checkBox_9.setObjectName("checkBox_9")
self.gridLayout_2.addWidget(self.checkBox_9, 2, 2, 1, 1)
self.checkBox_5 = QtWidgets.QCheckBox(self.gridLayoutWidget)
self.checkBox_5.setObjectName("checkBox_5")
self.gridLayout_2.addWidget(self.checkBox_5, 1, 1, 1, 1)
self.checkBox_4 = QtWidgets.QCheckBox(self.gridLayoutWidget)
self.checkBox_4.setObjectName("checkBox_4")
self.gridLayout_2.addWidget(self.checkBox_4, 1, 0, 1, 1)
self.checkBox_8 = QtWidgets.QCheckBox(self.gridLayoutWidget)
self.checkBox_8.setObjectName("checkBox_8")
self.gridLayout_2.addWidget(self.checkBox_8, 2, 1, 1, 1)
self.checkBox_10 = QtWidgets.QCheckBox(self.gridLayoutWidget)
self.checkBox_10.setObjectName("checkBox_10")
self.gridLayout_2.addWidget(self.checkBox_10, 3, 0, 1, 1)
self.checkBox_3 = QtWidgets.QCheckBox(self.gridLayoutWidget)
self.checkBox_3.setObjectName("checkBox_3")
self.gridLayout_2.addWidget(self.checkBox_3, 0, 2, 1, 1)
self.checkBox = QtWidgets.QCheckBox(self.gridLayoutWidget)
self.checkBox.setObjectName("checkBox")
self.gridLayout_2.addWidget(self.checkBox, 0, 0, 1, 1)
self.label_6 = QtWidgets.QLabel(self.tab_3)
self.label_6.setGeometry(QtCore.QRect(440, 30, 281, 41))
font = QtGui.QFont()
font.setFamily("华文宋体")
font.setPointSize(18)
self.label_6.setFont(font)
self.label_6.setObjectName("label_6")
self.label_12 = QtWidgets.QLabel(self.tab_3)
self.label_12.setGeometry(QtCore.QRect(0, 310, 211, 41))
font = QtGui.QFont()
font.setFamily("Adobe Arabic")
font.setPointSize(12)
self.label_12.setFont(font)
self.label_12.setObjectName("label_12")
self.tabWidget.addTab(self.tab_3, "")
self.tab_4 = QtWidgets.QWidget()
self.tab_4.setObjectName("tab_4")
self.gridLayoutWidget_3 = QtWidgets.QWidget(self.tab_4)
self.gridLayoutWidget_3.setGeometry(QtCore.QRect(140, 90, 691, 171))
self.gridLayoutWidget_3.setObjectName("gridLayoutWidget_3")
self.gridLayout_5 = QtWidgets.QGridLayout(self.gridLayoutWidget_3)
self.gridLayout_5.setContentsMargins(0, 0, 0, 0)
self.gridLayout_5.setObjectName("gridLayout_5")
self.page2_checkBox_4 = QtWidgets.QCheckBox(self.gridLayoutWidget_3)
self.page2_checkBox_4.setObjectName("page2_checkBox_4")
self.gridLayout_5.addWidget(self.page2_checkBox_4, 1, 0, 1, 1)
self.page2_checkBox_6 = QtWidgets.QCheckBox(self.gridLayoutWidget_3)
self.page2_checkBox_6.setObjectName("page2_checkBox_6")
self.gridLayout_5.addWidget(self.page2_checkBox_6, 1, 2, 1, 1)
self.page2_checkBox_9 = QtWidgets.QCheckBox(self.gridLayoutWidget_3)
self.page2_checkBox_9.setObjectName("page2_checkBox_9")
self.gridLayout_5.addWidget(self.page2_checkBox_9, 2, 2, 1, 1)
self.page2_checkBox_5 = QtWidgets.QCheckBox(self.gridLayoutWidget_3)
self.page2_checkBox_5.setObjectName("page2_checkBox_5")
self.gridLayout_5.addWidget(self.page2_checkBox_5, 1, 1, 1, 1)
self.page2_checkBox_2 = QtWidgets.QCheckBox(self.gridLayoutWidget_3)
self.page2_checkBox_2.setObjectName("page2_checkBox_2")
self.gridLayout_5.addWidget(self.page2_checkBox_2, 0, 1, 1, 1)
self.page2_checkBox_3 = QtWidgets.QCheckBox(self.gridLayoutWidget_3)
self.page2_checkBox_3.setObjectName("page2_checkBox_3")
self.gridLayout_5.addWidget(self.page2_checkBox_3, 0, 2, 1, 1)
self.page2_checkBox_7 = QtWidgets.QCheckBox(self.gridLayoutWidget_3)
self.page2_checkBox_7.setObjectName("page2_checkBox_7")
self.gridLayout_5.addWidget(self.page2_checkBox_7, 2, 0, 1, 1)
self.page2_checkBox_1 = QtWidgets.QCheckBox(self.gridLayoutWidget_3)
self.page2_checkBox_1.setObjectName("page2_checkBox_1")
self.gridLayout_5.addWidget(self.page2_checkBox_1, 0, 0, 1, 1)
self.page2_checkBox_8 = QtWidgets.QCheckBox(self.gridLayoutWidget_3)
self.page2_checkBox_8.setObjectName("page2_checkBox_8")
self.gridLayout_5.addWidget(self.page2_checkBox_8, 2, 1, 1, 1)
self.page2_checkBox_10 = QtWidgets.QCheckBox(self.gridLayoutWidget_3)
self.page2_checkBox_10.setObjectName("page2_checkBox_10")
self.gridLayout_5.addWidget(self.page2_checkBox_10, 3, 0, 1, 1)
self.label_13 = QtWidgets.QLabel(self.tab_4)
self.label_13.setGeometry(QtCore.QRect(50, 30, 211, 41))
font = QtGui.QFont()
font.setFamily("Adobe Arabic")
font.setPointSize(12)
self.label_13.setFont(font)
self.label_13.setObjectName("label_13")
self.label_14 = QtWidgets.QLabel(self.tab_4)
self.label_14.setGeometry(QtCore.QRect(50, 270, 211, 41))
font = QtGui.QFont()
font.setFamily("Adobe Arabic")
font.setPointSize(12)
self.label_14.setFont(font)
self.label_14.setObjectName("label_14")
self.tableWidget = QtWidgets.QTableWidget(self.tab_4)
self.tableWidget.setGeometry(QtCore.QRect(150, 320, 701, 111))
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(5)
self.tableWidget.setRowCount(2)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(4, item)
self.pushButton_send_2 = QtWidgets.QPushButton(self.tab_4)
self.pushButton_send_2.setGeometry(QtCore.QRect(380, 600, 201, 61))
self.pushButton_send_2.setObjectName("pushButton_send_2")
self.tableWidget_2 = QtWidgets.QTableWidget(self.tab_4)
self.tableWidget_2.setGeometry(QtCore.QRect(150, 440, 701, 111))
self.tableWidget_2.setObjectName("tableWidget_2")
self.tableWidget_2.setColumnCount(5)
self.tableWidget_2.setRowCount(2)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setVerticalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setVerticalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setHorizontalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_2.setHorizontalHeaderItem(4, item)
self.tabWidget.addTab(self.tab_4, "")
self.tab_7 = QtWidgets.QWidget()
self.tab_7.setObjectName("tab_7")
self.tableWidget_3 = QtWidgets.QTableWidget(self.tab_7)
self.tableWidget_3.setGeometry(QtCore.QRect(50, 60, 911, 501))
self.tableWidget_3.setObjectName("tableWidget_3")
self.tableWidget_3.setColumnCount(6)
self.tableWidget_3.setRowCount(50)
for i in range(50):
item = QtWidgets.QTableWidgetItem()
self.tableWidget_3.setVerticalHeaderItem(i, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_3.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_3.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_3.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_3.setHorizontalHeaderItem(3, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_3.setHorizontalHeaderItem(4, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget_3.setHorizontalHeaderItem(5, item)
self.tabWidget.addTab(self.tab_7, "")
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(330, 10, 281, 41))
font = QtGui.QFont()
font.setFamily("华文宋体")
font.setPointSize(18)
self.label_5.setFont(font)
self.label_5.setObjectName("label_5")
Main_cmd_msg.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(Main_cmd_msg)
self.menubar.setGeometry(QtCore.QRect(0, 0, 1011, 26))
self.menubar.setObjectName("menubar")
Main_cmd_msg.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(Main_cmd_msg)
self.statusbar.setObjectName("statusbar")
Main_cmd_msg.setStatusBar(self.statusbar)
self.retranslateUi(Main_cmd_msg)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(Main_cmd_msg)
self.Ui_Changes(Main_cmd_msg)
def retranslateUi(self, Main_cmd_msg):
_translate = QtCore.QCoreApplication.translate
Main_cmd_msg.setWindowTitle(_translate("Main_cmd_msg", "值班员界面"))
self.radioButton_gb.setText(_translate("Main_cmd_msg", "广播模式"))
self.radioButton_db.setText(_translate("Main_cmd_msg", "点播模式"))
self.radioButton_dsbb.setText(_translate("Main_cmd_msg", "定时播报模式"))
self.textEdit.setHtml(_translate("Main_cmd_msg", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
self.pushButton_2.setText(_translate("Main_cmd_msg", "确认"))
self.pushButton.setText(_translate("Main_cmd_msg", "确认"))
self.label_3.setText(_translate("Main_cmd_msg", "任务结束时间:"))
self.label.setText(_translate("Main_cmd_msg", "任务编号/主题:"))
self.label_2.setText(_translate("Main_cmd_msg", "任务开始时间:"))
self.label_7.setText(_translate("Main_cmd_msg", "定点播报时间:"))
self.pushButton_4.setText(_translate("Main_cmd_msg", "确认"))
self.pushButton_send_1.setText(_translate("Main_cmd_msg", "发送"))
self.pushButton_3.setText(_translate("Main_cmd_msg", "清除"))
self.label_4.setText(_translate("Main_cmd_msg", "通知内容:"))
self.checkBox_2.setText(_translate("Main_cmd_msg", "二班"))
self.checkBox_6.setText(_translate("Main_cmd_msg", "六班"))
self.checkBox_7.setText(_translate("Main_cmd_msg", "七班"))
self.checkBox_9.setText(_translate("Main_cmd_msg", "九班"))
self.checkBox_5.setText(_translate("Main_cmd_msg", "五班"))
self.checkBox_4.setText(_translate("Main_cmd_msg", "四班"))
self.checkBox_8.setText(_translate("Main_cmd_msg", "八班"))
self.checkBox_10.setText(_translate("Main_cmd_msg", "十班"))
self.checkBox_3.setText(_translate("Main_cmd_msg", "三班"))
self.checkBox.setText(_translate("Main_cmd_msg", "一班"))
self.label_6.setText(_translate("Main_cmd_msg", "值班员编辑任务界面"))
self.label_12.setText(_translate("Main_cmd_msg", "告知班级选择"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("Main_cmd_msg", "文本告知"))
self.page2_checkBox_4.setText(_translate("Main_cmd_msg", "四班"))
self.page2_checkBox_6.setText(_translate("Main_cmd_msg", "六班"))
self.page2_checkBox_9.setText(_translate("Main_cmd_msg", "九班"))
self.page2_checkBox_5.setText(_translate("Main_cmd_msg", "五班"))
self.page2_checkBox_2.setText(_translate("Main_cmd_msg", "二班"))
self.page2_checkBox_3.setText(_translate("Main_cmd_msg", "三班"))
self.page2_checkBox_7.setText(_translate("Main_cmd_msg", "七班"))
self.page2_checkBox_1.setText(_translate("Main_cmd_msg", "一班"))
self.page2_checkBox_8.setText(_translate("Main_cmd_msg", "八班"))
self.page2_checkBox_10.setText(_translate("Main_cmd_msg", "十班"))
self.label_13.setText(_translate("Main_cmd_msg", "告知班级选择"))
self.label_14.setText(_translate("Main_cmd_msg", "班级在线情况"))
item = self.tableWidget.verticalHeaderItem(0)
item.setText(_translate("Main_cmd_msg", "班级"))
item = self.tableWidget.verticalHeaderItem(1)
item.setText(_translate("Main_cmd_msg", "在线情况"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("Main_cmd_msg", "一班"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("Main_cmd_msg", "二班"))
item = self.tableWidget.horizontalHeaderItem(2)
item.setText(_translate("Main_cmd_msg", "三班"))
item = self.tableWidget.horizontalHeaderItem(3)
item.setText(_translate("Main_cmd_msg", "四班"))
item = self.tableWidget.horizontalHeaderItem(4)
item.setText(_translate("Main_cmd_msg", "五班"))
self.pushButton_send_2.setText(_translate("Main_cmd_msg", "开始连线"))
item = self.tableWidget_2.verticalHeaderItem(0)
item.setText(_translate("Main_cmd_msg", "班级"))
item = self.tableWidget_2.verticalHeaderItem(1)
item.setText(_translate("Main_cmd_msg", "在线情况"))
item = self.tableWidget_2.horizontalHeaderItem(0)
item.setText(_translate("Main_cmd_msg", "六班"))
item = self.tableWidget_2.horizontalHeaderItem(1)
item.setText(_translate("Main_cmd_msg", "七班"))
item = self.tableWidget_2.horizontalHeaderItem(2)
item.setText(_translate("Main_cmd_msg", "八班"))
item = self.tableWidget_2.horizontalHeaderItem(3)
item.setText(_translate("Main_cmd_msg", "九班"))
item = self.tableWidget_2.horizontalHeaderItem(4)
item.setText(_translate("Main_cmd_msg", "十班"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("Main_cmd_msg", "语音连线"))
item = self.tableWidget_3.horizontalHeaderItem(0)
item.setText(_translate("Main_cmd_msg", "发送方"))
item = self.tableWidget_3.horizontalHeaderItem(1)
item.setText(_translate("Main_cmd_msg", "接收方"))
item = self.tableWidget_3.horizontalHeaderItem(2)
item.setText(_translate("Main_cmd_msg", "开始时间"))
item = self.tableWidget_3.horizontalHeaderItem(3)
item.setText(_translate("Main_cmd_msg", "截止时间"))
item = self.tableWidget_3.horizontalHeaderItem(4)
item.setText(_translate("Main_cmd_msg", "任务主题"))
item = self.tableWidget_3.horizontalHeaderItem(5)
item.setText(_translate("Main_cmd_msg", "任务内容"))
#icon
Main_cmd_msg.setWindowIcon(QIcon("5b8614f82dcbe.png"))
#background
window_pale = QtGui.QPalette()
window_pale.setBrush(Main_cmd_msg.backgroundRole(), QtGui.QBrush(QtGui.QPixmap("background2.png")))
Main_cmd_msg.setPalette(window_pale)
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_7), _translate("Main_cmd_msg", "反馈/消息统计"))
self.label_5.setText(_translate("Main_cmd_msg", "值班员下达任务界面"))
def Ui_Changes(self,Main_cmd_msg):
# 设置文本告知
#设置时间
self.dateTimeEdit.setDateTime(QDateTime.currentDateTime())
self.dateTimeEdit_2.setDateTime(QDateTime.currentDateTime())
self.dateTimeEdit_3.setDateTime(QDateTime.currentDateTime())
#设置左侧按钮 广播 点播 定时播报
self.radioButton_gb.clicked.connect(lambda :self.label_12.setVisible(False))
self.radioButton_gb.toggled.connect(lambda :self.label_12.setVisible(True))
self.radioButton_gb.clicked.connect(lambda :self.checkBox.setVisible(False))
self.radioButton_gb.toggled.connect(lambda: self.checkBox.setVisible(True))
self.radioButton_gb.clicked.connect(lambda: self.checkBox_2.setVisible(False))
self.radioButton_gb.toggled.connect(lambda: self.checkBox_2.setVisible(True))
self.radioButton_gb.clicked.connect(lambda: self.checkBox_3.setVisible(False))
self.radioButton_gb.toggled.connect(lambda: self.checkBox_3.setVisible(True))
self.radioButton_gb.clicked.connect(lambda: self.checkBox_4.setVisible(False))
self.radioButton_gb.toggled.connect(lambda: self.checkBox_4.setVisible(True))
self.radioButton_gb.clicked.connect(lambda: self.checkBox_5.setVisible(False))
self.radioButton_gb.toggled.connect(lambda: self.checkBox_5.setVisible(True))
self.radioButton_gb.clicked.connect(lambda: self.checkBox_6.setVisible(False))
self.radioButton_gb.toggled.connect(lambda: self.checkBox_6.setVisible(True))
self.radioButton_gb.clicked.connect(lambda: self.checkBox_7.setVisible(False))
self.radioButton_gb.toggled.connect(lambda: self.checkBox_7.setVisible(True))
self.radioButton_gb.clicked.connect(lambda: self.checkBox_8.setVisible(False))
self.radioButton_gb.toggled.connect(lambda: self.checkBox_8.setVisible(True))
self.radioButton_gb.clicked.connect(lambda: self.checkBox_9.setVisible(False))
self.radioButton_gb.toggled.connect(lambda: self.checkBox_9.setVisible(True))
self.radioButton_gb.clicked.connect(lambda: self.checkBox_10.setVisible(False))
self.radioButton_gb.toggled.connect(lambda: self.checkBox_10.setVisible(True))
self.label_7.setVisible(False)
self.dateTimeEdit_3.setVisible(False)
self.pushButton_4.setVisible(False)
self.radioButton_dsbb.clicked.connect(lambda: self.label_7.setVisible(True))
self.radioButton_dsbb.toggled.connect(lambda: self.label_7.setVisible(False))
self.radioButton_dsbb.clicked.connect(lambda: self.dateTimeEdit_3.setVisible(True))
self.radioButton_dsbb.toggled.connect(lambda: self.dateTimeEdit_3.setVisible(False))
self.radioButton_dsbb.clicked.connect(lambda: self.pushButton_4.setVisible(True))
self.radioButton_dsbb.toggled.connect(lambda: self.pushButton_4.setVisible(False))
self.pushButton_3.clicked.connect(self.textEdit.clear)
self.pushButton_3.clicked.connect(self.lineEdit.clear)
self.dateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
self.dateTimeEdit_2.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
self.dateTimeEdit_3.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
self.pushButton_send_1.clicked.connect(self.Select_send_msgmod)
self.send_data_Signal.connect(self.Update_staform)
self.pushButton_send_2.clicked.connect(self.Emit_voice_data)
#将在线列表所有的格子设置为红色:
"""
# 创建新条目,设置背景颜色,添加到表格指定行列中
newItem = QTableWidgetItem("160")
#newItem.setForeground(QBrush(QColor(255, 0, 0)))
tableWidget.setItem(0, 2, newItem)
"""
for x in range(5):
newItem = QTableWidgetItem("不在线")
newItem.setForeground(QBrush(QColor(255, 0, 0)))
self.tableWidget.setItem(1, x, newItem)
for x in range(5):
newItem = QTableWidgetItem("不在线")
newItem.setForeground(QBrush(QColor(255, 0, 0)))
self.tableWidget_2.setItem(1, x, newItem)
def Emit_voice_data(self):
self.send_voice_data_Signal.emit()
def Select_send_msgmod(self):
if self.radioButton_gb.isChecked():#设置为广播模式
self.Broadcast()
elif self.radioButton_db.isChecked():#设置为点播模式
self.Dianbo()
elif self.radioButton_dsbb.isChecked():#设置为定时播报模式
self.Dianbo()
else:
self.Nonemod()
def Nonemod(self):#什么模式都没点
info = "请先选择模式!"
ch_win = QMessageBox.about(self.pushButton_send_1, "提示", info)
print(ch_win)
def Broadcast(self):#广播模式
title = self.lineEdit.text()
startdate = self.dateTimeEdit.date()
starttime = self.dateTimeEdit.time()
enddate = self.dateTimeEdit_2.date()
endtime = self.dateTimeEdit_2.time()
msg =self.textEdit.toPlainText()
data = {"sender":"zhibanyuan", "receiver":"broadcast", "startdatetime":startdate.toString('yyyy-MM-dd')+" "+starttime.toString('HH:mm:ss'),
"enddatetime":enddate.toString('yyyy-MM-dd')+" "+endtime.toString('HH:mm:ss'), "title":title, "msg":msg}
self.send_data_Signal.emit(data)
print(title,startdate.toString(),starttime.toString(),enddate.toString(),endtime.toString())
def Dianbo(self):#点播模式
name_dict = self.Get_dianbo_name()
print(name_dict)
title = self.lineEdit.text()
startdate = self.dateTimeEdit.date()
starttime = self.dateTimeEdit.time()
enddate = self.dateTimeEdit_2.date()
endtime = self.dateTimeEdit_2.time()
msg =self.textEdit.toPlainText()
for class_name in name_dict.keys():
#self.tableWidget.item(d_row, d_col).text() # 获取某行某列item中的x信息
if name_dict[class_name] == 1:
classnum = int(class_name[-1])
if classnum >= 1 and classnum <= 5:
Isonline = self.tableWidget.item(1, classnum - 1).text()
if Isonline == "不在线":
info = str(classnum) + "班不在线!请重新选择!"
ch_win = QMessageBox.about(self.pushButton_send_1, "提示", info)
print(ch_win)
if classnum >= 6 and classnum <= 10:
Isonline = self.tableWidget_2.item(1, classnum - 6).text()
if Isonline == "不在线":
info = str(classnum) + "班不在线!请重新选择!"
ch_win = QMessageBox.about(self.pushButton_send_1, "提示", info)
print(ch_win)
data = {"sender":"zhibanyuan", "receiver":class_name, "startdatetime":startdate.toString('yyyy-MM-dd')+" "+starttime.toString('HH:mm:ss'),
"enddatetime":enddate.toString('yyyy-MM-dd')+" "+endtime.toString('HH:mm:ss'), "title":title, "msg":msg}
self.send_data_Signal.emit(data)
print(class_name,title, startdate.toString(), starttime.toString(), enddate.toString(), endtime.toString())
def Get_dianbo_name(self):
retdict={}
name_list=[0]*10
if self.checkBox.isChecked():
name_list[0]=1
if self.checkBox_2.isChecked():
name_list[1]=1
if self.checkBox_3.isChecked():
name_list[2]=1
if self.checkBox_4.isChecked():
name_list[3]=1
if self.checkBox_5.isChecked():
name_list[4]=1
if self.checkBox_6.isChecked():
name_list[5]=1
if self.checkBox_7.isChecked():
name_list[6]=1
if self.checkBox_8.isChecked():
name_list[7]=1
if self.checkBox_9.isChecked():
name_list[8]=1
if self.checkBox_10.isChecked():
name_list[9]=1
for i in range(10):
classnm =i+1
name = "class"+str(classnm)
retdict[name] = name_list[i]
return retdict
def Update_staform(self,data):#用来更新值班员的统计表
row = self.table_row
newItem=QTableWidgetItem(data["sender"])
self.tableWidget_3.setItem(row,0,newItem)
newItem=QTableWidgetItem(data["receiver"])
self.tableWidget_3.setItem(row,1,newItem)
newItem=QTableWidgetItem(data["startdatetime"])
self.tableWidget_3.setItem(row,2,newItem)
newItem=QTableWidgetItem(data["enddatetime"])
self.tableWidget_3.setItem(row,3,newItem)
newItem=QTableWidgetItem(data["title"])
self.tableWidget_3.setItem(row,4,newItem)
newItem=QTableWidgetItem(data["msg"])
self.tableWidget_3.setItem(row,5,newItem)
self.table_row=row+1
def Update_receive_data(self, data):#用来更新来自学员端传来的信息
row = self.table_row
newItem=QTableWidgetItem(data["sender"])
self.tableWidget_3.setItem(row,0,newItem)
newItem=QTableWidgetItem(data["receiver"])
self.tableWidget_3.setItem(row,1,newItem)
newItem=QTableWidgetItem(data["startdatetime"])
self.tableWidget_3.setItem(row,2,newItem)
newItem=QTableWidgetItem(data["title"])
self.tableWidget_3.setItem(row,4,newItem)
newItem=QTableWidgetItem(data["msg"])
self.tableWidget_3.setItem(row,5,newItem)
self.table_row=row+1
def Update_user_list(self,userdict):
userlist = userdict.keys()
for x in range(5):
newItem = QTableWidgetItem("不在线")
newItem.setForeground(QBrush(QColor(255, 0, 0)))
self.tableWidget.setItem(1, x, newItem)
for x in range(5):
newItem = QTableWidgetItem("不在线")
newItem.setForeground(QBrush(QColor(255, 0, 0)))
self.tableWidget_2.setItem(1, x, newItem)
for x in range(5):
if "class"+str((x+1)) in userlist:
newItem = QTableWidgetItem("在线")
newItem.setForeground(QBrush(QColor(0, 255, 0)))
self.tableWidget.setItem(1, x, newItem)
for x in range(5):
if "class"+str((x+6)) in userlist:
newItem = QTableWidgetItem("在线")
newItem.setForeground(QBrush(QColor(0, 255, 0)))
self.tableWidget_2.setItem(1, x, newItem)
"""
if __name__ == "__main__":
app = QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
win = Ui_Main_cmd_msg()
win.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
"""

@ -0,0 +1,140 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'login_ui.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication,QLineEdit,QMainWindow,QWidget
from PyQt5.QtWidgets import QWidget,QMessageBox
import sys
from PyQt5.QtCore import pyqtSignal,QObject
class Ui_login_ui(QWidget):
open_cmd_Signal = pyqtSignal(str, str)
open_user_Signal = pyqtSignal(str, str)
close_this_win_signal = pyqtSignal()
def setupUi(self, login_ui):
login_ui.setObjectName("login_ui")
login_ui.resize(537, 298)
self.formLayoutWidget = QtWidgets.QWidget(login_ui)
self.formLayoutWidget.setGeometry(QtCore.QRect(130, 80, 241, 61))
self.formLayoutWidget.setObjectName("formLayoutWidget")
self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget)
self.formLayout.setContentsMargins(0, 0, 0, 0)
self.formLayout.setObjectName("formLayout")
self.label = QtWidgets.QLabel(self.formLayoutWidget)
self.label.setObjectName("label")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label)
self.label_2 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_2.setObjectName("label_2")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2)
self.lineEdit_identity = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_identity.setObjectName("lineEdit_identity")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit_identity)
self.lineEdit_password = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_password.setObjectName("lineEdit_password")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEdit_password)
self.lineEdit_password.setEchoMode(QLineEdit.Password)
#按键
self.pushButton_login = QtWidgets.QPushButton(login_ui)
self.pushButton_login.setFont(QtGui.QFont('Microsoft YaHei', 10))
self.pushButton_login.setStyleSheet(
"QPushButton{color:rgb(255,255,255)}" # 按键前景色
"QPushButton{background-color:rgb(137,152,152)}" # 按键背景色
"QPushButton:hover{color:rgb(255,255,255)}" # 光标移动到上面后的前景色
"QPushButton{border-radius:6px}" # 圆角半径
"QPushButton:pressed{background-color:rgb(183,199,198);border: None;}" # 按下时的样式
)
#self.pushButton_login.setGeometry(QtCore.QRect(200, 160, 93, 28))
self.pushButton_login.setGeometry(QtCore.QRect(210, 170, 103, 30))
self.pushButton_login.setObjectName("pushButton_login")
self.pushButton_login.clicked.connect(self.Is_legal_user)
self.retranslateUi(login_ui)
QtCore.QMetaObject.connectSlotsByName(login_ui)
self.close_this_win_signal.connect(login_ui.close)
def retranslateUi(self, login_ui):
_translate = QtCore.QCoreApplication.translate
login_ui.setWindowTitle(_translate("login_ui", "广播通知与应答反馈系统"))
#icon
login_ui.setWindowIcon(QIcon("5b8614f82dcbe.png"))
#background
window_pale = QtGui.QPalette()
window_pale.setBrush(login_ui.backgroundRole(), QtGui.QBrush(QtGui.QPixmap("background2.png")))
login_ui.setPalette(window_pale)
#label1
strT = '<span style=\" color: rgb(135,127,127);\">%s</span>' % ('账号') # 绿色
self.label.setText("%s" % (strT))
self.label.setFont(QtGui.QFont('Microsoft YaHei', 10))
#label2
strT = '<span style=\" color: rgb(135,127,127);\">%s</span>' % ('密码') # 绿色
self.label_2.setText("%s" % (strT))
self.label_2.setFont(QtGui.QFont('Microsoft YaHei', 10))
#button
self.pushButton_login.setText(_translate("login_ui", "登录"))
def Is_legal_user(self):
userid = self.lineEdit_identity.text()
password = self.lineEdit_password.text()
#下面是登录验证环节:
if password == "":#这步是验证用户是否合法,如果合法:
#启动类client
if userid == "zhibanyuan":#如果是值班员,发送值班员信号,用于打开值班员界面
self.open_cmd_Signal.emit(userid,password)
else:#发送学员信号,打开学员界面
self.open_user_Signal.emit(userid, password)
self.close_this_win_signal.emit()
else:
info = "密码错误!"
ch_win = QMessageBox.about(self.pushButton_login,"提示",info)
print(ch_win)
"""
if __name__ == "__main__":
app = QApplication(sys.argv)
widget = QtWidgets.QMainWindow()
win = Ui_login_ui()
win.setupUi(widget)
widget.show()
sys.exit(app.exec_())
"""
"""
app = QtWidgets.QApplication(sys.argv) # 创建一个QApplication也就是你要开发的软件app
MainWindow = QtWidgets.QMainWindow() # 创建一个QMainWindow用来装载你需要的各种组件、控件
ui = Ui_MainWindow() # ui是Ui_MainWindow()类的实例化对象
ui.setupUi(MainWindow) # 执行类中的setupUi方法方法的参数是第二步中创建的QMainWindow
MainWindow.show() # 执行QMainWindow的show()方法显示这个QMainWindow
sys.exit(app.exec_()) # 使用exit()或者点击关闭按钮退出QApplication
"""

@ -0,0 +1,67 @@
from login_ui import Ui_login_ui
from cmd_send_msg import Ui_Main_cmd_msg
from stu_receive_msg import Ui_stu_win
from client_voice_cmd import Client_voice_cmd
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QDate, QDateTime , QTime
import datetime
from PyQt5.QtCore import pyqtSignal
from client import Client
import socket
import json
import rsa
from binascii import hexlify
import os
import threading
import sys
def start_client_cmd(username,password):
client.set_username(username,password)
client.run()
def start_voice_client_cmd():
thread = threading.Thread(target=Client_voice_cmd)
thread.start()
#client_voice_cmd = Client_voice_cmd()
if __name__ == "__main__":
app = QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
# 初始化client类
username = ""
client = Client()
log_win = Ui_login_ui()
log_win.setupUi(MainWindow)
log_win.open_cmd_Signal.connect(start_client_cmd)
MainWindow.show()
#初始化值班员界面
MainWindow1 = QtWidgets.QMainWindow()
win = Ui_Main_cmd_msg()
win.setupUi(MainWindow1)
client.send_data_Signal.connect(win.Update_receive_data)
client.send_userlist_Signal.connect(win.Update_user_list)
win.send_data_Signal.connect(client.receive_from_ui)
#点播模式消除了self.dict的文件
#win.pushButton_send_1.clicked.connect(client.run_step)
win.send_data_Signal.connect(client.run_step)
log_win.open_cmd_Signal.connect(MainWindow1.show)
win.send_voice_data_Signal.connect(start_voice_client_cmd)
sys.exit(app.exec_())

@ -0,0 +1,55 @@
from login_ui import Ui_login_ui
from cmd_send_msg import Ui_Main_cmd_msg
from stu_receive_msg import Ui_stu_win
from client_voice_stu import Client_voice_stu
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QDate, QDateTime, QTime, pyqtSignal
import datetime
from client import Client
import socket
import json
import rsa
from binascii import hexlify
import os
import threading
import sys
def start_client_user(username,password):
client.set_username(username,password)
client.run()
client_voice_stu = Client_voice_stu()
if __name__ == "__main__":
app = QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
# 初始化client类
username = ""
client = Client()
log_win = Ui_login_ui()
log_win.setupUi(MainWindow)
log_win.open_user_Signal.connect(start_client_user)
MainWindow.show()
#初始化学员界面
MainWindow2 = QtWidgets.QMainWindow()
win1 =Ui_stu_win()
win1.setupUi(MainWindow2)
client.send_data_Signal.connect(win1.Update_receive_data)
win1.send_to_cmd_sig.connect(client.receive_from_ui)
win1.pushButton.clicked.connect(client.run_step)
log_win.open_user_Signal.connect(MainWindow2.show)
win1.pushButton_3.clicked.connect(MainWindow2.close)
win1.pushButton_3.clicked.connect(client.disconnection)
#win1.close.connect(client.disconnection)
sys.exit(app.exec_())

@ -0,0 +1,77 @@
#当部署到不同的计算机的时候修改程序中的IP 和 PORT
import socket
import json
import threading
import time
class Server:
def __init__(self):
IP = socket.gethostbyname(socket.gethostname())
PORT = 1
self.ADDR = (IP, PORT)
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server.bind(self.ADDR)
self.active_users = {} # {username : [conn, pub_key]}
def send_list_active_users(self):
user_info = {user: self.active_users[user][1] for user in self.active_users}
users = {"users": user_info}
for user, info in self.active_users.items():
print(users)
info[0].send(json.dumps(users).encode())
def send_message(self, data): # 向receiver发送json数据
receiver = data["receiver"]
if receiver not in self.active_users.keys():
return
conn = self.active_users[receiver][0]
conn.send(json.dumps(data).encode())
print(data)
def disconnect_client(self, username, client):
print(f"[DISCONNECTING] {username}")
data={"msg":"DISCONNECTING"}
client.send(json.dumps(data).encode())
client.close()
del self.active_users[username]
self.send_list_active_users()
def init_data(self, client): #
data = client.recv(1024).decode()
data = json.loads(data)
self.active_users[data["username"]] = [client, 0]
self.send_list_active_users()
return data["username"]
def listen_client(self, conn):
username = self.init_data(conn)
while True:
msg = conn.recv(1024).decode()
data = json.loads(msg)
if data["msg"] == "!DISCONNECT":
self.disconnect_client(username, conn)
else:
print(f"[MESSAGE] {data}")
self.send_message(data)
def run(self):
try:
self.server.listen()
while True:
conn, addr = self.server.accept()
thread = threading.Thread(target=self.listen_client, args=(conn,))
thread.start()
time.sleep(1)
#print(f"[ACTIVE CONNECTIONS] {threading.activeCount() - 1}")
print(f"[USERS] {list(self.active_users.keys())}")
except Exception as e:
self.server.close()
server = Server()
server.run()

@ -0,0 +1,53 @@
import socket
import threading
class Server_voice:
def __init__(self):
self.ip = socket.gethostbyname(socket.gethostname())
while 1:
try:
self.port = 2
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.bind((self.ip, self.port))
break
except:
print("Couldn't bind to that port")
self.connections = []
self.accept_connections()
def accept_connections(self):
self.s.listen(100) # 开始tcp监听
print('Running on IP: ' + self.ip)
print('Running on port: ' + str(self.port))
while True:
c, addr = self.s.accept() # 返回端口和地址(用户端)
self.connections.append(c)
threading.Thread(target=self.handle_client, args=(c, addr,)).start() # 接收到就广播
def broadcast(self, sock, data): # 向除了sock的所有端口发送data
for client in self.connections:
if client != self.s and client != sock:
try:
client.send(data)
except:
pass
def handle_client(self, c, addr): # 传送数据
while 1:
try:
data = c.recv(1024)
self.broadcast(c, data)
except socket.error:
c.close()
server = Server_voice()

@ -0,0 +1,216 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'stu_msg.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
import datetime
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QDate, QDateTime , QTime
import datetime
from PyQt5.QtCore import pyqtSignal
class Ui_stu_win(QMainWindow):
table_row = 0
send_to_cmd_sig = pyqtSignal(dict)
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(849, 641)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(260, 10, 351, 81))
font = QtGui.QFont()
font.setFamily("Adobe 宋体 Std L")
font.setPointSize(26)
#设置字体
self.label.setFont(font)
self.label.setObjectName("label")
#接收
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setGeometry(QtCore.QRect(10, 80, 831, 511))
self.tabWidget.setTabShape(QtWidgets.QTabWidget.Triangular)
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.tableWidget = QtWidgets.QTableWidget(self.tab)
self.tableWidget.setGeometry(QtCore.QRect(0, 10, 821, 481))
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(4)
self.tableWidget.setRowCount(50)
#50行的消息列表吧
for i in range(50):
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setVerticalHeaderItem(i, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(1, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(2, item)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(3, item)
self.tabWidget.addTab(self.tab, "")
#tab_2是两个大筐筐之一里面有2个pushButton,
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
#编辑反馈信息
self.label_2 = QtWidgets.QLabel(self.tab_2)
self.label_2.setGeometry(QtCore.QRect(0, 10, 111, 31))
self.label_2.setObjectName("label_2")
self.widget = QtWidgets.QWidget(self.tab_2)
self.widget.setGeometry(QtCore.QRect(480, 400, 321, 30))
self.widget.setObjectName("widget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
#发送
self.pushButton = QtWidgets.QPushButton(self.widget)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout.addWidget(self.pushButton)
#清除
self.pushButton_2 = QtWidgets.QPushButton(self.widget)
self.pushButton_2.setObjectName("pushButton_2")
self.horizontalLayout.addWidget(self.pushButton_2)
self.widget1 = QtWidgets.QWidget(self.tab_2)
self.widget1.setGeometry(QtCore.QRect(0, 40, 821, 341))
self.widget1.setObjectName("widget1")
self.verticalLayout = QtWidgets.QVBoxLayout(self.widget1)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
#关于任务
self.lineEdit = QtWidgets.QLineEdit(self.widget1)
self.lineEdit.setObjectName("lineEdit")
self.verticalLayout.addWidget(self.lineEdit)
#textEdit 主体
self.textEdit = QtWidgets.QTextEdit(self.widget1)
self.textEdit.setObjectName("textEdit")
self.verticalLayout.addWidget(self.textEdit)
self.tabWidget.addTab(self.tab_2, "")
self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(740, 10, 93, 28))
self.pushButton_3.setObjectName("pushButton_3")
self.pushButton_3.clicked.connect(self.close)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 849, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(1)
self.pushButton_2.clicked.connect(self.textEdit.clear)
self.pushButton_2.clicked.connect(self.lineEdit.clear)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "学员接收系统"))
self.label.setText(_translate("MainWindow", "学员接收反馈系统"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "任务主题"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "开始时间"))
item = self.tableWidget.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "结束时间"))
item = self.tableWidget.horizontalHeaderItem(3)
item.setText(_translate("MainWindow", "要求"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "接收"))
self.label_2.setText(_translate("MainWindow", "编辑反馈信息:"))
self.pushButton.setText(_translate("MainWindow", "发送"))
self.pushButton_2.setText(_translate("MainWindow", "清除"))
self.lineEdit.setText(_translate("MainWindow", "关于任务:"))
self.textEdit.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">主体:</p></body></html>"))
#textEdit background
self.textEdit.setStyleSheet("background-image:url(:5b8614f82dcbe.png);\n"
"background-attachment:fixed;\n"
"background-repeat:none;\n"
"background-position:center")
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "反馈"))
self.pushButton.clicked.connect(self.Emit_feedback)
self.pushButton_3.setText(_translate("MainWindow", "退出"))
#icon
MainWindow.setWindowIcon(QIcon("5b8614f82dcbe.png"))
#background
window_pale = QtGui.QPalette()
window_pale.setBrush(MainWindow.backgroundRole(), QtGui.QBrush(QtGui.QPixmap("background2.png")))
MainWindow.setPalette(window_pale)
def Update_receive_data(self,data):
row = self.table_row
print("update studentuser table!!")
newItem=QTableWidgetItem(data["title"])
self.tableWidget.setItem(row,0,newItem)
newItem=QTableWidgetItem(data["startdatetime"])
self.tableWidget.setItem(row,1,newItem)
newItem=QTableWidgetItem(data["enddatetime"])
self.tableWidget.setItem(row,2,newItem)
newItem=QTableWidgetItem(data["msg"])
self.tableWidget.setItem(row,3,newItem)
self.table_row=row+1
print(row)
def Emit_feedback(self):
title = self.lineEdit.text()
msg = self.textEdit.toPlainText()
now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
data = {"sender":"","receiver":"zhibanyuan","title":title,"msg":msg,"startdatetime":now_time}
print(data)
self.send_to_cmd_sig.emit(data)
Loading…
Cancel
Save