78 lines
3.2 KiB
Python
78 lines
3.2 KiB
Python
|
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
|
from PyQt5.QtCore import Qt,QModelIndex, pyqtSignal
|
|
from PyQt5.QtGui import QStandardItemModel, QStandardItem
|
|
from PyQt5.QtWidgets import (QTableWidgetItem, QTableWidget, QAbstractItemView, QHeaderView, QStyleFactory)
|
|
|
|
from rscder.utils.project import PairLayer, ResultLayer
|
|
|
|
class ResultTable(QtWidgets.QWidget):
|
|
|
|
on_item_click = pyqtSignal(dict)
|
|
on_item_changed = pyqtSignal(dict)
|
|
|
|
def __init__(self, parent=None):
|
|
super(ResultTable, self).__init__(parent)
|
|
# self.tableview = QTableView(self)
|
|
self.tablewidget = QTableWidget(self)
|
|
self.tablewidget.setColumnCount(4)
|
|
self.tablewidget.setRowCount(0)
|
|
self.tablewidget.setHorizontalHeaderLabels(['X', 'Y', '概率', '变化'])
|
|
self.tablewidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
|
|
|
|
self.tablewidget.cellDoubleClicked.connect(self.onDoubleClicked)
|
|
self.tablewidget.cellClicked.connect(self.onClicked)
|
|
self.tablewidget.cellChanged.connect(self.onChanged)
|
|
|
|
# self.tablewidget.setModel(self.tableview)
|
|
# self.tableview
|
|
layout = QtWidgets.QVBoxLayout(self)
|
|
layout.addWidget(self.tablewidget)
|
|
self.setLayout(layout)
|
|
|
|
def clear(self):
|
|
pass
|
|
|
|
def onChanged(self, row, col):
|
|
if col == 3:
|
|
item_idx = row
|
|
item_status = self.tablewidget.item(row, col).checkState() == Qt.Checked
|
|
if item_status:
|
|
self.tablewidget.item(row, col).setBackground(Qt.yellow)
|
|
else:
|
|
self.tablewidget.item(row, col).setBackground(Qt.green)
|
|
self.on_item_changed.emit({'idx':item_idx, 'status':item_status})
|
|
|
|
def onClicked(self, row, col):
|
|
if col == 3:
|
|
self.tablewidget.item(row, col).setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)
|
|
|
|
def onDoubleClicked(self, row, col):
|
|
x = self.tablewidget.item(row, 0).text()
|
|
y = self.tablewidget.item(row, 1).text()
|
|
self.on_item_click.emit({'x':x, 'y':y})
|
|
|
|
def set_data(self, data:ResultLayer):
|
|
self.tablewidget.setRowCount(len(data.data))
|
|
# print(len(data.data))
|
|
self.tablewidget.setVerticalHeaderLabels([ str(i+1) for i in range(len(data.data))])
|
|
for i, d in enumerate(data.data):
|
|
self.tablewidget.setItem(i, 0, QTableWidgetItem(str(d[0]))) # X
|
|
self.tablewidget.setItem(i, 1, QTableWidgetItem(str(d[1]))) # Y
|
|
self.tablewidget.setItem(i, 2, QTableWidgetItem(str(d[2]))) # 概率
|
|
status_item = QTableWidgetItem('变化')
|
|
if d[3] == 0:
|
|
status_item.setBackground(Qt.green)
|
|
status_item.setCheckState(Qt.Unchecked)
|
|
elif d[3] == 1:
|
|
status_item.setBackground(Qt.yellow)
|
|
status_item.setCheckState(Qt.Checked)
|
|
self.tablewidget.setItem(i, 3, status_item) # 变化
|
|
self.tablewidget.resizeColumnsToContents()
|
|
self.tablewidget.resizeRowsToContents()
|
|
self.tablewidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
|
self.tablewidget.verticalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
|
|
|
|
|
|