目录
描述:
1 单击选中一行
2 右键菜单
3 填充数据
4 提取行数据
5 删除行数据
代码
from PyQt6.QtCore import (
Qt
)
from PyQt6.QtGui import (
QAction
)
from PyQt6.QtWidgets import (
QApplication,
QAbstractItemView,
QLabel,
QTableWidget,
QTableWidgetItem,
QWidget,
QVBoxLayout,
QMenu
)
class TempWidget(QWidget):
def __init__(self):
super().__init__()
self.label = QLabel('--')
self.label1 = QLabel('--')
self.table = QTableWidget()
self.table.setColumnCount(3)
self.table.setHorizontalHeaderLabels(['代码','名称','细分行业'])
self.table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
self.table.setSelectionMode(QAbstractItemView.SelectionMode.SingleSelection)
self.table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
self.table.itemClicked.connect(self.table_itemClicked)
self.context_menu = QMenu(self)
get_action = QAction('提取',self)
delete_action = QAction('删除',self)
self.context_menu.addAction(get_action)
self.context_menu.addAction(delete_action)
get_action.triggered.connect(self.get_action_triggered)
delete_action.triggered.connect(self.delete_action_triggered)
self.table.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
self.table.customContextMenuRequested.connect(self.table_customContextMenuRequested)
layout = QVBoxLayout()
layout.addWidget(self.label)
layout.addWidget(self.label1)
layout.addWidget(self.table)
self.setLayout(layout)
self.open_init()
pass
def open_init(self):
data_list = [
['600519','贵州茅台','白酒'],
['601398','工商银行','银行'],
['601288','农业银行','银行'],
['601857','中国石油','石油开采'],
['300750','宁的时代','电气设备'],
['600900','长江电力','水力发电'],
]
self.table.setRowCount(len(data_list))
for r,row in enumerate(data_list):
for c,v in enumerate(row):
self.table.setItem(r,c,QTableWidgetItem(str(v)))
self.table.resizeColumnsToContents()
pass
def table_itemClicked(self,cur_item: QTableWidgetItem):
cur_row = cur_item.row()
self.label.setText(f'当前选中的行号为:{cur_row}')
pass
def get_action_triggered(self):
selected = self.table.selectedIndexes()
if selected:
row = selected[0].row()
col_count = self.table.columnCount()
res_str = ''
for i in range(col_count):
res_str += self.table.item(row,i).text() + ';'
self.label1.setText(res_str)
pass
def delete_action_triggered(self):
selected = self.table.selectedIndexes()
if selected:
row = selected[0].row()
self.table.removeRow(row)
pass
def table_customContextMenuRequested(self,pos):
self.context_menu.exec(self.table.viewport().mapToGlobal(pos))
pass
if __name__ == '__main__':
app = QApplication([])
mw = TempWidget()
mw.show()
app.exec()
pass