# 用户管理内嵌页面子类 from PySide6.QtWidgets import QWidget, QTableWidgetItem, QMessageBox, QHeaderView from PySide6.QtCore import Qt, QObject, QEvent, Slot from PySide6.QtGui import QKeyEvent, QHideEvent from msg_dict import g_uiGeometrySize from wndMain.pageUserMgt.uiSub_User import Ui_pageUser from common.generalFunc import CCommon from dbCtrl.clsUserTb import g_userCtrl from msg_dict import g_uiCtrlScript class CSubPageUser(QWidget): # public: def __init__(self, widgetSize: tuple[int, int], parent=None): super().__init__(parent) self.ui = Ui_pageUser() self.ui.setupUi(self) # 按需声明对应的成员变量 self.szStack = widgetSize pass # 界面初始化 def uiInit(self) -> None: self._screenAdapter() # 界面自适应 self._changeWndStyle() # 设置成无框架边框 self._centerWidget() # 居中显示 self._changeLine_edit() # 设置用户输入限制 self._setupSignalSlotMapping() # 创建信号映射 self._loadUserData() # 加载用户数据 self._changeTableStyle() # 设置表格样式 pass # ---------------------------------------- # private: # 纵向调整子控件高度 def _adjustVerticalHeight(self): nBottomPos = self.geometry().bottom() - g_uiGeometrySize['WND_MARGIN_VERT'] rctTemp = self.ui.grpUserlist.geometry() rctTemp.setBottom(nBottomPos) self.ui.grpUserlist.setGeometry(rctTemp) # -------------------------------------- rctOtherTemp = self.ui.tabUserInfo.geometry() rctOtherTemp.setHeight(rctTemp.height() - rctOtherTemp.top() - g_uiGeometrySize['WND_MARGIN_VERT'] * 3) self.ui.tabUserInfo.setGeometry(rctOtherTemp) # 界面自适应 def _screenAdapter(self) -> None: self.resize(self.szStack[0], self.szStack[1]) self._adjustVerticalHeight() pass # 修改窗体属性 def _changeWndStyle(self) -> None: self.setWindowFlags(Qt.WindowType.FramelessWindowHint) pass # 修改表格样式 def _changeTableStyle(self) -> None: # 禁止所有列宽拖动 self.ui.tabUserInfo.horizontalHeader().setSectionResizeMode(QHeaderView.Fixed) # 单元格内容居中 for row in range(self.ui.tabUserInfo.rowCount()): for col in range(self.ui.tabUserInfo.columnCount()): item = self.ui.tabUserInfo.item(row, col) if item: item.setTextAlignment(Qt.AlignCenter) # 窗口居中显示 def _centerWidget(self) -> None: pass # 设置用户输入限制 def _changeLine_edit(self) -> None: self.ui.edtUserName.installEventFilter(self) # 建立时间触发 # 添加用户到表格 def _addUserToTable(self, user_id: str, user_type: int, create_date: str) -> None: # 插入新行 rowPosition = self.ui.tabUserInfo.rowCount() self.ui.tabUserInfo.insertRow(rowPosition) # 设置用户id self.ui.tabUserInfo.setItem(rowPosition, 0, QTableWidgetItem(user_id)) # 设置用户类别 self.ui.tabUserInfo.setItem(rowPosition, 1, QTableWidgetItem(user_type)) # 设置创建日期 self.ui.tabUserInfo.setItem(rowPosition, 2, QTableWidgetItem(create_date)) pass # 加载用户数据到表格 def _loadUserData(self) -> None: # 清空表格 self.ui.tabUserInfo.setRowCount(0) # 获取所有用户信息 user_list = g_userCtrl.readUserId_type_date() # 填充表格 for user_info in user_list: self._addUserToTable(user_info[0], user_info[1], user_info[2]) # 重新加载表格样式 self._changeTableStyle() pass # 建立信号槽连接 def _setupSignalSlotMapping(self) -> None: self.ui.btnAdd.clicked.connect(self._onAddUserClicked) self.ui.btnDel.clicked.connect(self._onDeleteUserClicked) pass # ---------事件重载--------- def eventFilter(self, obj: QObject, event): # 处理对应输入框的键盘事件 if obj == self.ui.edtUserName and QEvent.Type.KeyPress == event.type(): clsKeyEvent = QKeyEvent(event) key = clsKeyEvent.key() modifier = clsKeyEvent.modifiers() key_char = clsKeyEvent.text() return super().eventFilter(obj, event) if CCommon.fnCheckInputValid(key, modifier, key_char) else True # 非输入框/非键盘按下事件,按默认逻辑处理 return super().eventFilter(obj, event) # ----------------信号槽接口---------------- @Slot() def _onAddUserClicked(self) -> None: # 获取输入的用户名 user_name = self.ui.edtUserName.text().strip() if not user_name: QMessageBox.warning(self, g_uiCtrlScript['MSG_TITLE_TIPS'], g_uiCtrlScript['MSG_SCRIPT_INPUT_USER']) return # 检查用户名是否已存在 if user_name in g_userCtrl.readAllUserIDs(): QMessageBox.warning(self, g_uiCtrlScript['MSG_TITLE_TIPS'], g_uiCtrlScript['MSG_SCRIPT_USER_EXIST']) return # 获取用户类型 user_type = 1 if self.ui.rdoTech.isChecked() else 2 # 添加用户 success = g_userCtrl.addNewUser(user_name, user_type) if success: self._loadUserData() # 清空输入框 self.ui.edtUserName.clear() QMessageBox.information(self, g_uiCtrlScript['MSG_TITLE_TIPS'], g_uiCtrlScript['MSG_SCRIPT_ADD_USER_SUCCESS']) else: QMessageBox.warning(self, g_uiCtrlScript['MSG_TITLE_TIPS'], g_uiCtrlScript['MSG_SCRIPT_DEL_USER_FAIL']) pass @Slot() def _onDeleteUserClicked(self) -> None: # 获取选中的行 selected_items = self.ui.tabUserInfo.selectedItems() if not selected_items: QMessageBox.warning(self, g_uiCtrlScript['MSG_TITLE_TIPS'], g_uiCtrlScript['MSG_SCRIPT_DEL_USER_SELECT']) return # 获取选中的用户名 selected_users = [] for i in range(0, len(selected_items), 3): row = selected_items[i].row() user_name = self.ui.tabUserInfo.item(row, 0).text() selected_users.append(user_name) # 确认删除 reply = QMessageBox.question(self, g_uiCtrlScript['MSG_TITLE_TIPS'], g_uiCtrlScript['MSG_SCRIPT_DEL_USER_CONFIRM'].format(len(selected_users)), QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: success = g_userCtrl.delUser(selected_users) if success: self._loadUserData() QMessageBox.information(self, g_uiCtrlScript['MSG_TITLE_TIPS'], g_uiCtrlScript['MSG_SCRIPT_DEL_USER_SUCCESS']) else: QMessageBox.warning(self, g_uiCtrlScript['MSG_TITLE_TIPS'], g_uiCtrlScript['MSG_SCRIPT_DEL_USER_FAIL']) pass