LISHUZUOXUN_yangjiang/LSZXPagesManagerLibrary/test.py

152 lines
5.8 KiB
Python
Raw Normal View History

2024-09-23 14:54:15 +08:00
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class ButtonCellWidget(QWidget):
def __init__(self, parent=None):
super(ButtonCellWidget, self).__init__(parent)
self.layout = QHBoxLayout()
self.update_band_button = QPushButton("更新手环")
self.update_button = QPushButton("更新")
self.delete_button = QPushButton("删除")
self.layout.addWidget(self.update_band_button)
self.layout.addWidget(self.update_button)
self.layout.addWidget(self.delete_button)
self.setLayout(self.layout)
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
desktop = QDesktopWidget()
screenRect = desktop.availableGeometry()
self.resize(screenRect.width(), screenRect.height()) # 设置容器大小为屏幕大小
self.setWindowTitle("从接口获取数据的表格示例")
# 创建一个垂直布局
main_layout = QVBoxLayout()
# 创建按钮栏
button_widget = QWidget()
button_layout = QHBoxLayout()
button_widget.setLayout(button_layout)
self.select_all_button = QPushButton("全选")
self.deselect_all_button = QPushButton("非全选")
self.add_button = QPushButton("添加")
self.delete_button = QPushButton("删除")
button_layout.addWidget(self.select_all_button)
button_layout.addWidget(self.deselect_all_button)
button_layout.addWidget(self.add_button)
button_layout.addWidget(self.delete_button)
main_layout.addWidget(button_widget)
self.table_widget = QTableWidget()
main_layout.addWidget(self.table_widget)
self.setCentralWidget(QWidget())
self.centralWidget().setLayout(main_layout)
# 模拟添加 100 条数据
data = []
for i in range(100):
row_data = {
"name": f"姓名{i}",
"id": i + 1,
"class": f"班级{i}",
"gender": "" if i % 2 == 0 else "",
"band_id": f"手环编号{i}"
}
data.append(row_data)
# 设置表格的列名
column_names = ['', '姓名', '编号', '班级', '性别', '手环编号', '操作']
self.table_widget.setColumnCount(len(column_names))
self.table_widget.setHorizontalHeaderLabels(column_names)
# 设置表头样式
header = self.table_widget.horizontalHeader()
header.setStyleSheet("""
QHeaderView::section {
background-color: #f5f7fa;
border-top: none;
border-left: none;
border-right: 1px solid #d8d8d8;
border-bottom: 1px solid #d8d8d8;
font: 600 20px 'Microsoft YaHei UI';
}
""")
# 设置行数并填充数据
self.table_widget.setRowCount(len(data))
for row_index, row_data in enumerate(data):
# 添加复选框
check_box = QCheckBox()
# 创建一个新的 QWidget 来容纳复选框并使其居中
check_box_widget = QWidget()
check_box_layout = QHBoxLayout(check_box_widget)
check_box_layout.addWidget(check_box, alignment=Qt.AlignCenter)
self.table_widget.setCellWidget(row_index, 0, check_box_widget)
check_box.stateChanged.connect(lambda state, row=row_index: self.print_row_info(state, row))
for col_index, col_name in enumerate(column_names[1:]):
if col_name == '姓名':
value = row_data['name']
elif col_name == '编号':
value = str(row_data['id'])
elif col_name == '班级':
value = row_data['class']
elif col_name == '性别':
value = row_data['gender']
elif col_name == '手环编号':
value = row_data['band_id']
elif col_name == '操作':
widget = ButtonCellWidget()
self.table_widget.setCellWidget(row_index, col_index + 1, widget)
value = ""
item = QTableWidgetItem(value)
item.setTextAlignment(Qt.AlignCenter) # 设置文字居中
self.table_widget.setItem(row_index, col_index + 1, item)
self.table_widget.setStyleSheet(
"font: 18px \"Microsoft YaHei UI\";"
)
# 使表格宽度撑满屏幕
# self.table_widget.horizontalHeader().setStretchLastSection(True)
self.table_widget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
# 设置第一列宽度为 50px
self.table_widget.horizontalHeader().setSectionResizeMode(0, QHeaderView.Fixed)
self.table_widget.setColumnWidth(0, 50)
# 设置最后一列宽度为 200px
self.table_widget.horizontalHeader().setSectionResizeMode(len(column_names) - 1, QHeaderView.Fixed)
self.table_widget.setColumnWidth(len(column_names) - 1, 500)
# 使表格行高和列宽自适应
# self.table_widget.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
# self.table_widget.verticalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
self.table_widget.verticalHeader().setDefaultSectionSize(50)
def print_row_info(self, state, row):
if state == Qt.Checked:
row_data = {}
for col_index in range(self.table_widget.columnCount()):
item = self.table_widget.item(row, col_index)
if item:
row_data[self.table_widget.horizontalHeaderItem(col_index).text()] = item.text()
print(row_data)
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()