175 lines
6.3 KiB
Python
175 lines
6.3 KiB
Python
from PyQt5.QtWidgets import *
|
||
from PyQt5.QtCore import Qt
|
||
|
||
|
||
class PopWindowsWifi:
|
||
|
||
def __init__(self, parent):
|
||
super().__init__()
|
||
self.parent = parent
|
||
self.wifi_name = None
|
||
self.labels = []
|
||
self.wifi_list = []
|
||
desktop = QDesktopWidget()
|
||
self.screenRect = desktop.availableGeometry()
|
||
self.dialog = QDialog(
|
||
flags=Qt.CustomizeWindowHint | Qt.WindowCloseButtonHint | Qt.WindowStaysOnTopHint
|
||
) # 设置无图标和标题
|
||
self.dialog.setStyleSheet("background-color:#ffffff;")
|
||
self.dialog.setContentsMargins(0, 0, 0, 0)
|
||
self.dialog.setFixedSize(int(self.screenRect.width() * 0.35),
|
||
int(self.screenRect.height() * 0.75)) # 设置对话框的宽度为屏幕的35%,高度为屏幕的70%
|
||
|
||
self.cancel_btn = self._init_cancel_button()
|
||
self.commit_btn = self._init_commit_button()
|
||
|
||
self.cancel_btn.clicked.connect(self.cancel_button_action)
|
||
self.commit_btn.clicked.connect(self.commit_button_action)
|
||
|
||
self.top_layout = QHBoxLayout()
|
||
self.top_layout.setContentsMargins(20, 0, 0, 0)
|
||
self.top_label = QLabel("当前可连接WiFi列表")
|
||
self.top_label.setStyleSheet("font: 600 26px \"Microsoft YaHei UI\";")
|
||
self.top_layout.addWidget(self.top_label)
|
||
|
||
# WiFi列表布局
|
||
self.list_layout = QVBoxLayout()
|
||
self.scroll_area = QScrollArea()
|
||
self.scroll_area.setStyleSheet("border:1px solid #bbbbbb;")
|
||
self.list_layout.addWidget(self.scroll_area)
|
||
|
||
self.cur_wifi_frame = QLabel("")
|
||
|
||
self.btn_layout = QHBoxLayout()
|
||
self.btn_layout.addWidget(self.cancel_btn, 50)
|
||
self.btn_layout.addWidget(self.commit_btn, 50)
|
||
#
|
||
self.bottom_layout = QVBoxLayout()
|
||
self.bottom_layout.addWidget(self.cur_wifi_frame, 35)
|
||
self.bottom_layout.addLayout(self.btn_layout, 65)
|
||
# 总布局
|
||
self.main_layout = QVBoxLayout()
|
||
self.main_layout.addLayout(self.top_layout, 4)
|
||
self.main_layout.addLayout(self.list_layout, 80)
|
||
self.main_layout.addLayout(self.bottom_layout, 16)
|
||
|
||
self.dialog.setLayout(self.main_layout)
|
||
|
||
# 添加遮罩层,设置parent,确保遮罩层在父页面中显示
|
||
self.overlay = QWidget(self.parent)
|
||
self.overlay.setStyleSheet("background-color: rgba(0, 0, 0, 0.5);")
|
||
self.overlay.resize(self.screenRect.width(), self.screenRect.height())
|
||
self.overlay.hide()
|
||
# 回调函数
|
||
self.wifi_select_action = None
|
||
|
||
def show(self, wifi_list):
|
||
self.overlay.show()
|
||
|
||
# 更新Wi-Fi列表数据
|
||
self.labels.clear()
|
||
self.wifi_list = wifi_list
|
||
self.cur_wifi_frame.setText("")
|
||
scroll_widget = QWidget()
|
||
scroll_widget.setStyleSheet("border: none;")
|
||
item_layout = QVBoxLayout(scroll_widget)
|
||
for wifi_info in self.wifi_list:
|
||
item_label = QLabel(wifi_info['name'])
|
||
item_label.setStyleSheet(
|
||
"font: 24px \"Microsoft YaHei UI\";"
|
||
"border:1px solid #a7a7a7;"
|
||
"border-radius:4px;"
|
||
"background-color:#f4f4f5;"
|
||
"padding: 12px 250px 12px 20px;"
|
||
"margin:6px;"
|
||
"color:#303133;"
|
||
)
|
||
item_layout.addWidget(item_label)
|
||
self.labels.append(item_label)
|
||
item_label.mousePressEvent = lambda event, lbl=item_label: self.wifi_name_clicked(event, lbl)
|
||
|
||
self.scroll_area.setWidget(scroll_widget)
|
||
|
||
self.dialog.show()
|
||
|
||
# 初始化取消按钮
|
||
@staticmethod
|
||
def _init_cancel_button():
|
||
cancel_btn = QPushButton("取消")
|
||
cancel_btn.setStyleSheet(
|
||
"border: 1px solid #222222;"
|
||
"color: #222222;"
|
||
"padding-top: 20px;"
|
||
"padding-bottom: 20px;"
|
||
"margin-left: 20px;"
|
||
"margin-right: 20px;"
|
||
"border-radius: 4px;"
|
||
"font: 24px \"Microsoft YaHei UI\";"
|
||
)
|
||
return cancel_btn
|
||
|
||
# 初始化确认按钮
|
||
@staticmethod
|
||
def _init_commit_button():
|
||
commit_btn = QPushButton("确定")
|
||
commit_btn.setStyleSheet(
|
||
"border: 1px solid #409eff;"
|
||
"color: #ffffff;"
|
||
"padding-top: 20px;"
|
||
"padding-bottom: 20px;"
|
||
"margin-left: 20px;"
|
||
"margin-right: 20px;"
|
||
"border-radius: 4px;"
|
||
"font: 24px \"Microsoft YaHei UI\";"
|
||
"background-color: #409eff;"
|
||
)
|
||
return commit_btn
|
||
|
||
# 取消按钮响应事件
|
||
def cancel_button_action(self):
|
||
self.labels = []
|
||
self.dialog.hide()
|
||
self.overlay.hide()
|
||
|
||
# 确认按钮响应事件
|
||
def commit_button_action(self):
|
||
# 调用链接函数
|
||
if self.wifi_select_action:
|
||
self.wifi_select_action(self.wifi_name)
|
||
|
||
self.dialog.hide()
|
||
self.overlay.hide()
|
||
|
||
def connect(self, func):
|
||
self.wifi_select_action = func
|
||
|
||
# 获取当前选中的WiFi名字
|
||
def wifi_name_clicked(self, event, label):
|
||
index = self.labels.index(label)
|
||
self.wifi_name = self.wifi_list[index]["name"]
|
||
self.cur_wifi_frame.setText('当前选中的WiFi:' + self.wifi_name)
|
||
self.cur_wifi_frame.setStyleSheet("font: 24px \"Microsoft YaHei UI\";margin-left:10px;")
|
||
for i, l in enumerate(self.labels):
|
||
if l == label:
|
||
# 选中时的样式
|
||
self.labels[i].setStyleSheet(
|
||
"font: 24px \"Microsoft YaHei UI\";"
|
||
"border: 1px solid #66b1ff;"
|
||
"border-radius: 4px;"
|
||
"background-color: #ecf5ff;"
|
||
"padding: 12px 250px 12px 20px;"
|
||
"margin: 6px;"
|
||
"color: #303133;"
|
||
)
|
||
else:
|
||
# 未选中时的样式
|
||
self.labels[i].setStyleSheet(
|
||
"font: 24px \"Microsoft YaHei UI\";"
|
||
"border: 1px solid #a7a7a7;"
|
||
"border-radius: 4px;"
|
||
"background-color: #f4f4f5;"
|
||
"padding: 12px 250px 12px 20px;"
|
||
"margin: 6px;"
|
||
"color: #303133;"
|
||
)
|