workloadinfos.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. from PyQt6 import QtCore, QtWidgets, QtGui
  2. from PyQt6.QtWidgets import QCheckBox
  3. class CheckableComboBox(QtWidgets.QComboBox):
  4. """支持多选的自定义ComboBox"""
  5. def __init__(self, parent=None):
  6. super().__init__(parent)
  7. self.setEditable(True)
  8. self.lineEdit().setReadOnly(True)
  9. self.lineEdit().setAlignment(QtCore.Qt.AlignmentFlag.AlignLeft)
  10. self.view().pressed.connect(self.handle_item_pressed)
  11. self.setModel(QtGui.QStandardItemModel())
  12. self.update_text() # 初始化显示
  13. def handle_item_pressed(self, index):
  14. item = self.model().item(index.row())
  15. item.setCheckState(
  16. QtCore.Qt.CheckState.Unchecked if item.checkState() == QtCore.Qt.CheckState.Checked else
  17. QtCore.Qt.CheckState.Checked
  18. )
  19. self.update_text() # 更新文本
  20. self.showPopup() # 保持下拉框打开
  21. def update_text(self):
  22. selected_texts = []
  23. for i in range(self.model().rowCount()):
  24. item = self.model().item(i)
  25. if item.checkState() == QtCore.Qt.CheckState.Checked:
  26. selected_texts.append(item.text())
  27. if not selected_texts:
  28. self.setEditText("请选择")
  29. else:
  30. self.setEditText(", ".join(selected_texts))
  31. self.update() # 强制刷新界面
  32. def addItem(self, text, data=None):
  33. item = QtGui.QStandardItem(text)
  34. item.setData(data)
  35. item.setFlags(QtCore.Qt.ItemFlag.ItemIsEnabled | QtCore.Qt.ItemFlag.ItemIsUserCheckable)
  36. item.setCheckState(QtCore.Qt.CheckState.Unchecked)
  37. self.model().appendRow(item)
  38. self.update_text() # 添加项后更新显示
  39. def addItems(self, texts):
  40. for text in texts:
  41. self.addItem(text)
  42. self.update_text() # 添加多项后更新显示
  43. def get_selected_items(self):
  44. return [
  45. self.model().item(i).text()
  46. for i in range(self.model().rowCount())
  47. if self.model().item(i).checkState() == QtCore.Qt.CheckState.Checked
  48. ]
  49. class Ui_workloadinfos(object):
  50. def setupUi(self, workloadinfos):
  51. workloadinfos.setObjectName("workloadinfos")
  52. workloadinfos.resize(1295, 794)
  53. self.gridLayout = QtWidgets.QGridLayout(workloadinfos)
  54. # 顶部控制区域
  55. self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
  56. self.horizontalLayout_5.setContentsMargins(-1, 10, -1, -1)
  57. self.label = QtWidgets.QLabel("人员列表:")
  58. self.label.setMaximumSize(QtCore.QSize(50, 16777215))
  59. self.horizontalLayout_5.addWidget(self.label)
  60. self.comboBox_peoplelist = CheckableComboBox(workloadinfos)
  61. self.comboBox_peoplelist.setMaximumSize(QtCore.QSize(100, 16777215))
  62. self.horizontalLayout_5.addWidget(self.comboBox_peoplelist)
  63. self.autoupdate_check = QCheckBox("自动刷新", workloadinfos)
  64. self.autoupdate_check.setMaximumSize(QtCore.QSize(70, 16777215))
  65. self.horizontalLayout_5.addWidget(self.autoupdate_check)
  66. self.refresh = QtWidgets.QPushButton("刷新")
  67. self.refresh.setMaximumSize(QtCore.QSize(35, 16777215))
  68. self.horizontalLayout_5.addWidget(self.refresh)
  69. self.clear = QtWidgets.QPushButton("清空")
  70. self.clear.setMaximumSize(QtCore.QSize(35, 16777215))
  71. self.horizontalLayout_5.addWidget(self.clear)
  72. self.selectall = QtWidgets.QPushButton("全选")
  73. self.selectall.setMaximumSize(QtCore.QSize(35, 16777215))
  74. self.horizontalLayout_5.addWidget(self.selectall)
  75. self.load_pushbutton = QtWidgets.QPushButton("导入")
  76. self.load_pushbutton.setMaximumSize(QtCore.QSize(35, 16777215))
  77. self.horizontalLayout_5.addWidget(self.load_pushbutton)
  78. # 搜索
  79. self.label_8 = QtWidgets.QLabel("")
  80. self.label_8.setMaximumSize(QtCore.QSize(35, 16777215))
  81. self.horizontalLayout_5.addWidget(self.label_8)
  82. self.searchinfo = QtWidgets.QLineEdit()
  83. self.searchinfo.setMaximumSize(QtCore.QSize(100, 16777215))
  84. self.searchinfo.setPlaceholderText("输入搜索内容,回车")
  85. self.horizontalLayout_5.addWidget(self.searchinfo)
  86. self.label_3 = QtWidgets.QLabel()
  87. self.horizontalLayout_5.addWidget(self.label_3)
  88. # 修正区域
  89. self.label_4 = QtWidgets.QLabel("修正内容")
  90. self.label_4.setMaximumSize(QtCore.QSize(50, 16777215))
  91. self.horizontalLayout_5.addWidget(self.label_4)
  92. self.changeinfo = QtWidgets.QLineEdit()
  93. self.changeinfo.setMaximumSize(QtCore.QSize(100, 16777215))
  94. self.horizontalLayout_5.addWidget(self.changeinfo)
  95. self.label_5 = QtWidgets.QLabel("人员:")
  96. self.label_5.setMaximumSize(QtCore.QSize(30, 16777215))
  97. self.horizontalLayout_5.addWidget(self.label_5)
  98. self.changepeople = QtWidgets.QLineEdit()
  99. self.changepeople.setMaximumSize(QtCore.QSize(80, 16777215))
  100. self.changepeople.setPlaceholderText("带字母输入")
  101. self.horizontalLayout_5.addWidget(self.changepeople)
  102. self.label_6 = QtWidgets.QLabel("工时:")
  103. self.label_6.setMaximumSize(QtCore.QSize(30, 16777215))
  104. self.horizontalLayout_5.addWidget(self.label_6)
  105. self.changevalue = QtWidgets.QLineEdit()
  106. self.changevalue.setMaximumSize(QtCore.QSize(30, 16777215))
  107. self.horizontalLayout_5.addWidget(self.changevalue)
  108. self.label_7 = QtWidgets.QLabel("标准工时")
  109. self.label_7.setMaximumSize(QtCore.QSize(55, 16777215))
  110. self.horizontalLayout_5.addWidget(self.label_7)
  111. self.changeselect = QtWidgets.QComboBox()
  112. self.changeselect.setMaximumSize(QtCore.QSize(80, 16777215))
  113. self.horizontalLayout_5.addWidget(self.changeselect)
  114. self.changeupdate = QtWidgets.QPushButton("提交修正")
  115. self.changeupdate.setMaximumSize(QtCore.QSize(80, 16777215))
  116. self.horizontalLayout_5.addWidget(self.changeupdate)
  117. self.gridLayout.addLayout(self.horizontalLayout_5, 0, 1, 2, 1)
  118. # 表格区域
  119. self.verticalLayout = QtWidgets.QVBoxLayout()
  120. self.tableWidgetWorkload = QtWidgets.QTableWidget(parent=workloadinfos)
  121. sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding,QtWidgets.QSizePolicy.Policy.Expanding)
  122. self.tableWidgetWorkload.setSizePolicy(sizePolicy)
  123. self.tableWidgetWorkload.setObjectName("tableWidgetWorkload")
  124. self.tableWidgetWorkload.setColumnCount(0)
  125. self.tableWidgetWorkload.setRowCount(0)
  126. self.tableWidgetWorkload.setSortingEnabled(True) # 启用排序
  127. self.tableWidgetWorkload.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows)
  128. self.tableWidgetWorkload.setAlternatingRowColors(True)
  129. self.verticalLayout.addWidget(self.tableWidgetWorkload)
  130. self.gridLayout.addLayout(self.verticalLayout, 2, 1, 1, 1)
  131. self.retranslateUi(workloadinfos)
  132. QtCore.QMetaObject.connectSlotsByName(workloadinfos)
  133. def retranslateUi(self, workloadinfos):
  134. _translate = QtCore.QCoreApplication.translate
  135. workloadinfos.setWindowTitle(_translate("workloadinfos", "排班辅助"))
  136. self.label.setText(_translate("workloadinfos", "人员列表:"))
  137. self.refresh.setText(_translate("workloadinfos", "刷新"))
  138. self.clear.setText(_translate("workloadinfos", "清空"))
  139. self.label_4.setText(_translate("workloadinfos", "修正内容"))
  140. self.label_5.setText(_translate("workloadinfos", "人员:"))
  141. self.label_6.setText(_translate("workloadinfos", "工时:"))
  142. self.label_7.setText(_translate("workloadinfos", "工时库"))
  143. self.changeupdate.setText(_translate("workloadinfos", "提交修正"))