工控上位机控制系统通用UI框架
This commit is contained in:
182
wndMain/pageUserMgt/sub_uiUser.py
Normal file
182
wndMain/pageUserMgt/sub_uiUser.py
Normal file
@ -0,0 +1,182 @@
|
||||
# 用户管理内嵌页面子类
|
||||
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
|
||||
|
||||
111
wndMain/pageUserMgt/uiSub_User.py
Normal file
111
wndMain/pageUserMgt/uiSub_User.py
Normal file
@ -0,0 +1,111 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
################################################################################
|
||||
## Form generated from reading UI file 'uiSub_User.ui'
|
||||
##
|
||||
## Created by: Qt User Interface Compiler version 6.9.1
|
||||
##
|
||||
## WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||
################################################################################
|
||||
|
||||
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
|
||||
QMetaObject, QObject, QPoint, QRect,
|
||||
QSize, QTime, QUrl, Qt)
|
||||
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
|
||||
QFont, QFontDatabase, QGradient, QIcon,
|
||||
QImage, QKeySequence, QLinearGradient, QPainter,
|
||||
QPalette, QPixmap, QRadialGradient, QTransform)
|
||||
from PySide6.QtWidgets import (QAbstractItemView, QApplication, QGroupBox, QHeaderView,
|
||||
QLabel, QLineEdit, QPushButton, QRadioButton,
|
||||
QSizePolicy, QTableWidget, QTableWidgetItem, QWidget)
|
||||
|
||||
class Ui_pageUser(object):
|
||||
def setupUi(self, pageUser):
|
||||
if not pageUser.objectName():
|
||||
pageUser.setObjectName(u"pageUser")
|
||||
pageUser.setEnabled(True)
|
||||
pageUser.resize(856, 493)
|
||||
self.grpUserInfo = QGroupBox(pageUser)
|
||||
self.grpUserInfo.setObjectName(u"grpUserInfo")
|
||||
self.grpUserInfo.setGeometry(QRect(10, 10, 341, 101))
|
||||
self.lblUserName = QLabel(self.grpUserInfo)
|
||||
self.lblUserName.setObjectName(u"lblUserName")
|
||||
self.lblUserName.setGeometry(QRect(20, 19, 81, 16))
|
||||
self.edtUserName = QLineEdit(self.grpUserInfo)
|
||||
self.edtUserName.setObjectName(u"edtUserName")
|
||||
self.edtUserName.setGeometry(QRect(118, 16, 201, 21))
|
||||
self.edtUserName.setMaxLength(30)
|
||||
self.lblUserType = QLabel(self.grpUserInfo)
|
||||
self.lblUserType.setObjectName(u"lblUserType")
|
||||
self.lblUserType.setGeometry(QRect(20, 60, 91, 16))
|
||||
self.rdoTech = QRadioButton(self.grpUserInfo)
|
||||
self.rdoTech.setObjectName(u"rdoTech")
|
||||
self.rdoTech.setGeometry(QRect(134, 59, 61, 20))
|
||||
self.rdoTech.setChecked(True)
|
||||
self.rdoOperator = QRadioButton(self.grpUserInfo)
|
||||
self.rdoOperator.setObjectName(u"rdoOperator")
|
||||
self.rdoOperator.setGeometry(QRect(214, 59, 61, 20))
|
||||
self.grpUserOp = QGroupBox(pageUser)
|
||||
self.grpUserOp.setObjectName(u"grpUserOp")
|
||||
self.grpUserOp.setGeometry(QRect(10, 120, 341, 71))
|
||||
self.btnAdd = QPushButton(self.grpUserOp)
|
||||
self.btnAdd.setObjectName(u"btnAdd")
|
||||
self.btnAdd.setGeometry(QRect(40, 20, 100, 41))
|
||||
self.btnAdd.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
|
||||
self.btnDel = QPushButton(self.grpUserOp)
|
||||
self.btnDel.setObjectName(u"btnDel")
|
||||
self.btnDel.setGeometry(QRect(190, 20, 100, 41))
|
||||
self.btnDel.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
|
||||
self.grpUserlist = QGroupBox(pageUser)
|
||||
self.grpUserlist.setObjectName(u"grpUserlist")
|
||||
self.grpUserlist.setGeometry(QRect(360, 10, 411, 461))
|
||||
self.lblUserlist = QLabel(self.grpUserlist)
|
||||
self.lblUserlist.setObjectName(u"lblUserlist")
|
||||
self.lblUserlist.setGeometry(QRect(20, 20, 61, 16))
|
||||
self.tabUserInfo = QTableWidget(self.grpUserlist)
|
||||
if (self.tabUserInfo.columnCount() < 3):
|
||||
self.tabUserInfo.setColumnCount(3)
|
||||
__qtablewidgetitem = QTableWidgetItem()
|
||||
self.tabUserInfo.setHorizontalHeaderItem(0, __qtablewidgetitem)
|
||||
__qtablewidgetitem1 = QTableWidgetItem()
|
||||
self.tabUserInfo.setHorizontalHeaderItem(1, __qtablewidgetitem1)
|
||||
__qtablewidgetitem2 = QTableWidgetItem()
|
||||
self.tabUserInfo.setHorizontalHeaderItem(2, __qtablewidgetitem2)
|
||||
self.tabUserInfo.setObjectName(u"tabUserInfo")
|
||||
self.tabUserInfo.setEnabled(True)
|
||||
self.tabUserInfo.setGeometry(QRect(20, 40, 371, 411))
|
||||
self.tabUserInfo.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
|
||||
self.tabUserInfo.setSelectionMode(QAbstractItemView.SelectionMode.MultiSelection)
|
||||
self.tabUserInfo.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
|
||||
self.tabUserInfo.setColumnCount(3)
|
||||
self.tabUserInfo.horizontalHeader().setVisible(True)
|
||||
self.tabUserInfo.horizontalHeader().setProperty(u"showSortIndicator", False)
|
||||
self.tabUserInfo.horizontalHeader().setStretchLastSection(True)
|
||||
self.tabUserInfo.verticalHeader().setStretchLastSection(False)
|
||||
|
||||
self.retranslateUi(pageUser)
|
||||
|
||||
QMetaObject.connectSlotsByName(pageUser)
|
||||
# setupUi
|
||||
|
||||
def retranslateUi(self, pageUser):
|
||||
pageUser.setWindowTitle(QCoreApplication.translate("pageUser", u"Form", None))
|
||||
self.grpUserInfo.setTitle("")
|
||||
self.lblUserName.setText(QCoreApplication.translate("pageUser", u"\u65b0\u589e\u7528\u6237\u540d\uff1a", None))
|
||||
self.edtUserName.setPlaceholderText(QCoreApplication.translate("pageUser", u"\u957f\u5ea630\uff0c\u4ec5\u9650\u82f1\u6587\u3001\u6570\u5b57\u548c\u4e0b\u5212\u7ebf", None))
|
||||
self.lblUserType.setText(QCoreApplication.translate("pageUser", u"\u65b0\u589e\u7528\u6237\u7c7b\u522b\uff1a", None))
|
||||
self.rdoTech.setText(QCoreApplication.translate("pageUser", u"\u6280\u672f\u5458", None))
|
||||
self.rdoOperator.setText(QCoreApplication.translate("pageUser", u"\u64cd\u4f5c\u5458", None))
|
||||
self.grpUserOp.setTitle("")
|
||||
self.btnAdd.setText(QCoreApplication.translate("pageUser", u"\u65b0\u589e\u7528\u6237", None))
|
||||
self.btnDel.setText(QCoreApplication.translate("pageUser", u"\u5220\u9664\u7528\u6237", None))
|
||||
self.grpUserlist.setTitle("")
|
||||
self.lblUserlist.setText(QCoreApplication.translate("pageUser", u"\u7528\u6237\u5217\u8868\uff1a", None))
|
||||
___qtablewidgetitem = self.tabUserInfo.horizontalHeaderItem(0)
|
||||
___qtablewidgetitem.setText(QCoreApplication.translate("pageUser", u"\u7528\u6237\u540d", None));
|
||||
___qtablewidgetitem1 = self.tabUserInfo.horizontalHeaderItem(1)
|
||||
___qtablewidgetitem1.setText(QCoreApplication.translate("pageUser", u"\u7528\u6237\u7c7b\u578b", None));
|
||||
___qtablewidgetitem2 = self.tabUserInfo.horizontalHeaderItem(2)
|
||||
___qtablewidgetitem2.setText(QCoreApplication.translate("pageUser", u"\u521b\u5efa\u65f6\u95f4", None));
|
||||
# retranslateUi
|
||||
|
||||
Reference in New Issue
Block a user