123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- from PyQt6 import QtCore, QtWidgets, QtGui
- from PyQt6.QtWidgets import QCheckBox
- class CheckableComboBox(QtWidgets.QComboBox):
- """支持多选的自定义ComboBox"""
- def __init__(self, parent=None):
- super().__init__(parent)
- self.setEditable(True)
- self.lineEdit().setReadOnly(True)
- self.lineEdit().setAlignment(QtCore.Qt.AlignmentFlag.AlignLeft)
- self.view().pressed.connect(self.handle_item_pressed)
- self.setModel(QtGui.QStandardItemModel())
- self.update_text() # 初始化显示
- def handle_item_pressed(self, index):
- item = self.model().item(index.row())
- item.setCheckState(
- QtCore.Qt.CheckState.Unchecked if item.checkState() == QtCore.Qt.CheckState.Checked else
- QtCore.Qt.CheckState.Checked
- )
- self.update_text() # 更新文本
- self.showPopup() # 保持下拉框打开
- def update_text(self):
- selected_texts = []
- for i in range(self.model().rowCount()):
- item = self.model().item(i)
- if item.checkState() == QtCore.Qt.CheckState.Checked:
- selected_texts.append(item.text())
- if not selected_texts:
- self.setEditText("请选择")
- else:
- self.setEditText(", ".join(selected_texts))
- self.update() # 强制刷新界面
- def addItem(self, text, data=None):
- item = QtGui.QStandardItem(text)
- item.setData(data)
- item.setFlags(QtCore.Qt.ItemFlag.ItemIsEnabled | QtCore.Qt.ItemFlag.ItemIsUserCheckable)
- item.setCheckState(QtCore.Qt.CheckState.Unchecked)
- self.model().appendRow(item)
- self.update_text() # 添加项后更新显示
- def addItems(self, texts):
- for text in texts:
- self.addItem(text)
- self.update_text() # 添加多项后更新显示
- def get_selected_items(self):
- return [
- self.model().item(i).text()
- for i in range(self.model().rowCount())
- if self.model().item(i).checkState() == QtCore.Qt.CheckState.Checked
- ]
- class Ui_workloadinfos(object):
- def setupUi(self, workloadinfos):
- workloadinfos.setObjectName("workloadinfos")
- workloadinfos.resize(1295, 794)
- self.gridLayout = QtWidgets.QGridLayout(workloadinfos)
- # 顶部控制区域
- self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
- self.horizontalLayout_5.setContentsMargins(-1, 10, -1, -1)
- self.label = QtWidgets.QLabel("人员列表:")
- self.label.setMaximumSize(QtCore.QSize(50, 16777215))
- self.horizontalLayout_5.addWidget(self.label)
- self.comboBox_peoplelist = CheckableComboBox(workloadinfos)
- self.comboBox_peoplelist.setMaximumSize(QtCore.QSize(100, 16777215))
- self.horizontalLayout_5.addWidget(self.comboBox_peoplelist)
- self.autoupdate_check = QCheckBox("自动刷新", workloadinfos)
- self.autoupdate_check.setMaximumSize(QtCore.QSize(70, 16777215))
- self.horizontalLayout_5.addWidget(self.autoupdate_check)
- self.refresh = QtWidgets.QPushButton("刷新")
- self.refresh.setMaximumSize(QtCore.QSize(35, 16777215))
- self.horizontalLayout_5.addWidget(self.refresh)
- self.clear = QtWidgets.QPushButton("清空")
- self.clear.setMaximumSize(QtCore.QSize(35, 16777215))
- self.horizontalLayout_5.addWidget(self.clear)
- self.selectall = QtWidgets.QPushButton("全选")
- self.selectall.setMaximumSize(QtCore.QSize(35, 16777215))
- self.horizontalLayout_5.addWidget(self.selectall)
- self.load_pushbutton = QtWidgets.QPushButton("导入")
- self.load_pushbutton.setMaximumSize(QtCore.QSize(35, 16777215))
- self.horizontalLayout_5.addWidget(self.load_pushbutton)
- # 搜索
- self.label_8 = QtWidgets.QLabel("")
- self.label_8.setMaximumSize(QtCore.QSize(35, 16777215))
- self.horizontalLayout_5.addWidget(self.label_8)
- self.searchinfo = QtWidgets.QLineEdit()
- self.searchinfo.setMaximumSize(QtCore.QSize(100, 16777215))
- self.searchinfo.setPlaceholderText("输入搜索内容,回车")
- self.horizontalLayout_5.addWidget(self.searchinfo)
- self.label_3 = QtWidgets.QLabel()
- self.horizontalLayout_5.addWidget(self.label_3)
- # 修正区域
- self.label_4 = QtWidgets.QLabel("修正内容")
- self.label_4.setMaximumSize(QtCore.QSize(50, 16777215))
- self.horizontalLayout_5.addWidget(self.label_4)
- self.changeinfo = QtWidgets.QLineEdit()
- self.changeinfo.setMaximumSize(QtCore.QSize(100, 16777215))
- self.horizontalLayout_5.addWidget(self.changeinfo)
- self.label_5 = QtWidgets.QLabel("人员:")
- self.label_5.setMaximumSize(QtCore.QSize(30, 16777215))
- self.horizontalLayout_5.addWidget(self.label_5)
- self.changepeople = QtWidgets.QLineEdit()
- self.changepeople.setMaximumSize(QtCore.QSize(80, 16777215))
- self.changepeople.setPlaceholderText("带字母输入")
- self.horizontalLayout_5.addWidget(self.changepeople)
- self.label_6 = QtWidgets.QLabel("工时:")
- self.label_6.setMaximumSize(QtCore.QSize(30, 16777215))
- self.horizontalLayout_5.addWidget(self.label_6)
- self.changevalue = QtWidgets.QLineEdit()
- self.changevalue.setMaximumSize(QtCore.QSize(30, 16777215))
- self.horizontalLayout_5.addWidget(self.changevalue)
- self.label_7 = QtWidgets.QLabel("标准工时")
- self.label_7.setMaximumSize(QtCore.QSize(55, 16777215))
- self.horizontalLayout_5.addWidget(self.label_7)
- self.changeselect = QtWidgets.QComboBox()
- self.changeselect.setMaximumSize(QtCore.QSize(80, 16777215))
- self.horizontalLayout_5.addWidget(self.changeselect)
- self.changeupdate = QtWidgets.QPushButton("提交修正")
- self.changeupdate.setMaximumSize(QtCore.QSize(80, 16777215))
- self.horizontalLayout_5.addWidget(self.changeupdate)
- self.gridLayout.addLayout(self.horizontalLayout_5, 0, 1, 2, 1)
- # 表格区域
- self.verticalLayout = QtWidgets.QVBoxLayout()
- self.tableWidgetWorkload = QtWidgets.QTableWidget(parent=workloadinfos)
- sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding,QtWidgets.QSizePolicy.Policy.Expanding)
- self.tableWidgetWorkload.setSizePolicy(sizePolicy)
- self.tableWidgetWorkload.setObjectName("tableWidgetWorkload")
- self.tableWidgetWorkload.setColumnCount(0)
- self.tableWidgetWorkload.setRowCount(0)
- self.tableWidgetWorkload.setSortingEnabled(True) # 启用排序
- self.tableWidgetWorkload.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows)
- self.tableWidgetWorkload.setAlternatingRowColors(True)
- self.verticalLayout.addWidget(self.tableWidgetWorkload)
- self.gridLayout.addLayout(self.verticalLayout, 2, 1, 1, 1)
- self.retranslateUi(workloadinfos)
- QtCore.QMetaObject.connectSlotsByName(workloadinfos)
- def retranslateUi(self, workloadinfos):
- _translate = QtCore.QCoreApplication.translate
- workloadinfos.setWindowTitle(_translate("workloadinfos", "排班辅助"))
- self.label.setText(_translate("workloadinfos", "人员列表:"))
- self.refresh.setText(_translate("workloadinfos", "刷新"))
- self.clear.setText(_translate("workloadinfos", "清空"))
- self.label_4.setText(_translate("workloadinfos", "修正内容"))
- self.label_5.setText(_translate("workloadinfos", "人员:"))
- self.label_6.setText(_translate("workloadinfos", "工时:"))
- self.label_7.setText(_translate("workloadinfos", "工时库"))
- self.changeupdate.setText(_translate("workloadinfos", "提交修正"))
|