[Asm] 纯文本查看 复制代码
import pyttsx3
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtMultimedia import *
from PyQt5.QtWidgets import *
from geopy.geocoders import Nominatim
import time
import subprocess
geolocator = Nominatim(user_agent="net_check_app")
ip_addresses = {
'本机': '127.0.0.1',
'核心交换机': '11.104.76.62',
'DTS网络': '11.104.76.55',
'市公司网络': '11.43.104.53',
'互联网': 'baidu.com'
}
engine = pyttsx3.init()
class Worker(QThread):
progress_signal = pyqtSignal(int)
status_signal = pyqtSignal(str, str)
def __init__(self, parent=None):
super().__init__(parent=parent)
self.stop_flag = False
def run(self):
while not self.stop_flag:
for name, ip in ip_addresses.items():
result = subprocess.run(["ping", "-n", "1", "-w", "500", ip], stdout=subprocess.PIPE)
output = result.stdout.decode("gbk")
if "TTL=" in output:
self.status_signal.emit(name, "正常")
else:
self.status_signal.emit(name, "断开")
engine.say(name + "网络连接已断开,请检查网络连接!")
engine.runAndWait()
self.progress_signal.emit(100)
time.sleep(5 * 60)
def stop(self):
self.stop_flag = True
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("南河监控网络自检")
self.setWindowIcon(QIcon("icon.png"))
self.setGeometry(0, 0, 800, 600)
self.setFixedSize(800, 600)
self.setStyleSheet("background-color: white;")
self.title_label = QLabel(self)
self.title_label.setText("南河监控网络自检")
self.title_label.setFont(QFont("Microsoft YaHei UI", 20, QFont.Bold))
self.title_label.setAlignment(Qt.AlignHCenter)
self.title_label.setGeometry(0, 20, 800, 40)
self.title_label.setStyleSheet("color: white; background-color: #3f3f3f;")
self.status_table = QTableWidget(self)
self.status_table.setColumnCount(2)
self.status_table.setHorizontalHeaderLabels(["名称", "状态"])
self.status_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.status_table.verticalHeader().setVisible(False)
self.status_table.setGeometry(50, 100, 300, 400)
self.png_label = QLabel(self)
self.png_label.setGeometry(400, 100, 350, 400)
self.png_label.setPixmap(QPixmap("1.png"))
self.png_label.setScaledContents(True)
self.progress_bar = QProgressBar(self)
self.progress_bar.setGeometry(50, 520, 300, 20)
self.progress_bar.setStyleSheet(
"QProgressBar {border: 2px solid grey; border-radius: 5px; text-align: center;} QProgressBar::chunk {background-color: #3f3f3f; width: 10px;}")
self.check_button = QPushButton(self)
self.check_button.setText("手动检测")
self.check_button.setFont(QFont("Microsoft YaHei UI", 12))
self.check_button.setStyleSheet(
"QPushButton {background-color: white; color: #3f3f3f; border: 1px solid #3f3f3f; border-radius: 5px; padding: 5px 10px;} QPushButton:hover {background-color: #3f3f3f; color: white;}")
self.check_button.setGeometry(50, 550, 120, 30)
self.check_button.clicked.connect(self.manual_check)
self.stop_button = QPushButton(self)
self.stop_button.setText("手动停止报警")
self.stop_button.setFont(QFont("Microsoft YaHei UI", 12))
self.stop_button.setStyleSheet(
"QPushButton {background-color: white; color: #3f3f3f; border: 1px solid #3f3f3f; border-radius: 5px; padding: 5px 10px;} QPushButton:hover {background-color: #3f3f3f; color: white;}")
self.stop_button.setGeometry(180, 550, 120, 30)
self.stop_button.clicked.connect(self.manual_stop_alert)
self.language_selector = QComboBox(self)
self.language_selector.addItem("中文")
self.language_selector.addItem("English")
self.language_selector.setGeometry(650, 550, 100, 30)
self.language_selector.currentIndexChanged.connect(self.change_language)
self.alert_player = QMediaPlayer(self)
self.alert_player.setMedia(QMediaContent(QUrl.fromLocalFile("alert.mp3")))
self.alert_player.setVolume(50)
self.worker = Worker()
self.worker.progress_signal.connect(self.update_progress_bar)
self.worker.status_signal.connect(self.update_status_table)
self.worker.start()
self.translator = QTranslator(self)
self.change_language()
def manual_check(self):
for name, ip in ip_addresses.items():
result = subprocess.run(["ping", "-n", "1", "-w", "500", ip], stdout=subprocess.PIPE)
output = result.stdout.decode("gbk")
if "TTL=" in output:
self.update_status_table(name, "正常")
else:
self.update_status_table(name, "断开")
self.alert_player.play()
engine.say(name + "网络连接已断开,请检查网络连接!")
engine.runAndWait()
def manual_stop_alert(self):
self.alert_player.stop()
def update_progress_bar(self, value):
self.progress_bar.setValue(value)
def update_status_table(self, name, status):
row_count = self.status_table.rowCount()
for i in range(row_count):
if self.status_table.item(i, 0).text() == name:
self.status_table.item(i, 1).setText(status)
break
else:
row = self.status_table.rowCount()
self.status_table.insertRow(row)
self.status_table.setItem(row, 0, QTableWidgetItem(name))
self.status_table.setItem(row, 1, QTableWidgetItem(status))
def change_language(self):
if self.language_selector.currentIndex() == 0:
self.translator.load("languages/zh_CN.qm")
elif self.language_selector.currentIndex() == 1:
self.translator.load("languages/en.qm")
qApp.installTranslator(self.translator)
self.retranslate_ui()
def retranslate_ui(self):
self.setWindowTitle(QCoreApplication.translate("MainWindow", "南河监控网络自检"))
self.title_label.setText(QCoreApplication.translate("MainWindow", "南河监控网络自检"))
self.check_button.setText(QCoreApplication.translate("MainWindow", "手动检测"))
self.stop_button.setText(QCoreApplication.translate("MainWindow", "手动停止报警"))
self.status_table.setHorizontalHeaderLabels([QCoreApplication.translate("MainWindow", "名称"),
QCoreApplication.translate("MainWindow", "状态")])
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
# 设置应用程序图标
app.setWindowIcon(QIcon("icon.png"))
# 设置应用程序样式
app.setStyle("Fusion")
# 设置应用程序主题
palette = QPalette()
palette.setColor(QPalette.Window, QColor("#ffffff"))
palette.setColor(QPalette.WindowText, QColor("#3f3f3f"))
palette.setColor(QPalette.Base, QColor("#ffffff"))
palette.setColor(QPalette.AlternateBase, QColor("#e6e6e6"))
palette.setColor(QPalette.ToolTipBase, QColor("#3f3f3f"))
palette.setColor(QPalette.ToolTipText, QColor("#ffffff"))
palette.setColor(QPalette.Text, QColor("#3f3f3f"))
palette.setColor(QPalette.Button, QColor("#ffffff"))
palette.setColor(QPalette.ButtonText, QColor("#3f3f3f"))
palette.setColor(QPalette.BrightText, QColor("#ffffff"))
palette.setColor(QPalette.Link, QColor("#0000ff"))
palette.setColor(QPalette.Highlight, QColor("#0078d7"))
palette.setColor(QPalette.HighlightedText, QColor("#ffffff"))
app.setPalette(palette)
window = MainWindow()
window.show()
sys.exit(app.exec_())