通过pyqt5编写的界面,通过os对防火墙入站规则进行开启与关闭
注意事项:
1、对程序路径进行符号转换,否则失效
2、关闭相关杀毒软件测试
3、以管理员身份运行,打包文件exe时同理开启管理员模式
4、打包工具:auto-py-to-exe(附打包配置)
5、因窗口图标ico文件为路径文件,需采用打包路径映射,并添加文件目录
6、python3.8.8版本32位实现,其他版本自行测试
'''
源代码
https://pan.baidu.com/s/11Xp1tiLAn9fjlbEIGFsGjw
eucz
exe文件
https://pan.baidu.com/s/1bBFefSKvzN_3r-9IyEQIQA
507q
'''
'''操作层面'''
import os
# 断网
def off():
os.system('netsh advfirewall firewall set rule name="hh_ldp" new enable=yes')
# 恢复网络
def reconnection():
os.system('netsh advfirewall firewall set rule name="hh_ldp" new enable=no')
# 添加路径,生成程序
def add(path):
os.system(r'netsh advfirewall firewall add rule name="hh_ldp" dir=out'
r' program="{}" action=block'.format(path))
'''UI控制层'''
import os
import time
import public
from Application.View.mainView import mainView
from PyQt5.QtCore import QSettings
from PyQt5.QtWidgets import QMessageBox,QFileDialog
from Common.operation import *
class mainController:
def __init__(self):
'''主界面控制层 类 初始化'''
# 配置文件路径
# self.ini = public.path + '\\Resource\\static\\config\\config.ini'
# self.ini = public.path + '\\config.ini'
self.ini = 'C:\\config.ini'
# print(self.ini)
# 创建界面对象
self.mainView = mainView()
# 槽函数 信号 初始化
self.event_init()
# 加载配置
self.load_setting()
# 实例化显示
self.mainView.show()
# 槽函数 信号 初始化
def event_init(self):
'''槽函数 信号 初始化'''
# 一键断联
self.mainView.StartButton.clicked.connect(self.Start)
# 断网按钮
self.mainView.BreakButton.clicked.connect(self.Break)
# 联网按钮
self.mainView.LinkButton.clicked.connect(self.Link)
# 程序生成
self.mainView.GenerateButton.clicked.connect(self.Generate)
# 保存配置
self.mainView.SaveButton.clicked.connect(self.save_setting)
# 选择路径
self.mainView.ChooseButton.clicked.connect(self.load_path)
# 保存界面配置
def save_setting(self):
def show_msg():
QMessageBox.information(self.mainView,'温馨提示', '配置保存成功')
'''保存界面配置'''
settings = QSettings(self.ini, QSettings.IniFormat)
# 设置 格式
settings.setIniCodec('utf8')
# 获取参数
path = self.mainView.lineEdit_path.text()
delay_time = self.mainView.lineEdit_time.text()
# 配置 字典
setting_dict = {
'path':path,
'delay_time':delay_time,
}
# 循环遍历 保存配置
for key, val in setting_dict.items():
settings.setValue(key, val)
show_msg()
def load_setting(self):
'''加载配置'''
# 判断文件路径是否存在
if os.path.exists(self.ini):
# 获取配置文件 配置内容
settings = QSettings(self.ini,QSettings.IniFormat)
# 设置 格式
settings.setIniCodec('utf8')
# 读取配置
path = settings.value('path')
delay_time = settings.value('delay_time')
# 界面显示
self.mainView.lineEdit_path.setText(path)
self.mainView.lineEdit_time.setText(delay_time)
def load_path(self):
'''选择并加载文件'''
file_path, file_type = QFileDialog.getOpenFileName(self.mainView,'请选择程序路径','E:/','All Files (*);;EXE Files (*.exe)')
if file_path:
if '.exe' in file_path:
self.mainView.lineEdit_path.setText(file_path)
def Start(self):
def show_msg():
QMessageBox.warning(self.mainView, '警告', '延时时间错误')
def show_msg_2():
QMessageBox.warning(self.mainView, '警告', '延时时间不能为负数')
def show_msg_3():
QMessageBox.warning(self.mainView, '警告', '请先进行程序生成')
# 截图读数-数字检测
def Is_number(s):
try:
float(s)
return True
except ValueError:
pass
try:
import unicodedata
unicodedata.numeric(s)
return True
except (TypeError, ValueError):
pass
return False
if public.Generate_Sign == True:
if Is_number(self.mainView.lineEdit_time.text()) == True:
if int(self.mainView.lineEdit_time.text()) >= 0:
off()
time.sleep(int(self.mainView.lineEdit_time.text()))
reconnection()
else:
show_msg_2()
else:
show_msg()
else:
show_msg_3()
def Break(self):
def show_msg_3():
QMessageBox.warning(self.mainView, '警告', '请先进行程序生成')
if public.Generate_Sign == True:
off()
else:
show_msg_3()
def Link(self):
def show_msg_3():
QMessageBox.warning(self.mainView, '警告', '请先进行程序生成')
if public.Generate_Sign == True:
reconnection()
else:
show_msg_3()
def Generate(self):
def show_msg():
QMessageBox.information(self.mainView,'温馨提示', '程序生成完成')
def show_msg_2():
QMessageBox.warning(self.mainView, '警告', '程序路径错误')
if '.exe' in self.mainView.lineEdit_path.text():
add(self.mainView.lineEdit_path.text().replace('/', '\\'))
public.Generate_Sign = True
show_msg()
else:
show_msg_2()
'''UI视图层'''
from public import path
from Resource.ui.mainUI import mainUI
from PyQt5.QtWidgets import QWidget
from PyQt5 import QtGui
class mainView(mainUI,QWidget):
def __init__(self):
super(mainView,self).__init__()
self.Icon_path = path + '\\Resource\\static\\images\\Icon\\哆啦A梦.ico'
self.setupUi(self)
self.retranslateUi(self)
self.ui_init()
def ui_init(self):
'''自定义UI'''
# 设置窗口图标
icon = QtGui.QIcon(self.Icon_path)
self.setWindowIcon(icon)
'''程序入口'''
import sys
import public
from PyQt5.QtWidgets import QApplication
from Application.Controller.mainController import mainController
from PyQt5.Qt import QFont,Qt
if __name__ == '__main__':
# 分辨率自适应
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) # Qt从5.6.0开始,支持High-DPI
app = QApplication(sys.argv)
# 重置字体大小
font = QFont("黑体")
pointsize = font.pointSize()
font.setPixelSize(pointsize)
app.setFont(font)
# 从控制层启动 主界面
first_ui = mainController()
sys.exit(app.exec_())
参考:https://blog.csdn.net/qq_42293487/article/details/110423382